如何可以将类值分配给C ++中的另一个嵌套类 [英] How can assign a class value to another nested classes in C++

查看:123
本文介绍了如何可以将类值分配给C ++中的另一个嵌套类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是第一次提出我的问题在Stackoverflow。我的qustion是我收到这个消息,当我试图运行这个代码:

this is the first time to ask my question on Stackoverflow. my qustion is i got this message when i trying to run this code:

object.h

#ifndef __NCTUNS_nslobject_h__
#define __NCTUNS_nslobject_h__

#include <stdio.h>
#include <event.h>

//---------------------------------------------------
#include <cstdlib>      //srand()
#include <iostream>     //cout
#include <ctime>        //time()
#include <cstring>      //strcmp()
//#include "test.h"       //testing functions
#include "RSA.h"        //GenerateKeyPair()
#include "PrimeGenerator.h"     //Generate()
//#include <stdio.h>
#include <stdlib.h>
#include <sstream>
#include <string>


//---------------------------------------------------

class MBinder;

struct plist {
u_int8_t        pid;
struct plist            *next;
};

struct MBlist {
u_int8_t    portnum;
MBinder     *sendt;
struct MBlist   *next;
};
 /*=========================================================================
 Define Macros
  =========================================================================*/
#define DISABLED        0x00
#define ENABLED         0x01


/*=========================================================================
Define Class ProtoType
=========================================================================*/

class NslObject {

private: 

char        *name_;     /* Instance name */
const u_int32_t nodeID_;    /* Node Id */
const u_int32_t nodeType_;  /* Node type, eg: SWITCH, HOST.. */
u_int32_t   portid_;    /* port Id */
struct plist    *MPlist_;
    //const  KeyPair  newKeyPair;


public :
/* add for new structure engine*/
    u_int32_t       pdepth;
    struct MBlist   *BinderList;
    u_int8_t       PortNum;

//------------------------------------------------
    static KeyPair  newKeyPair ;
    //static KeyPair  *KeyPtr1 ;//= new KeyPair;
    //------------------------------------------------
u_char          s_flowctl;      /* flow control for sending pkt */
u_char          r_flowctl;      /* flow control for receiving pkt */

MBinder     *recvtarget_;   /* to upper component */
MBinder     *sendtarget_;   /* to lower component */


NslObject(u_int32_t, u_int32_t, struct plist*, const char *);
NslObject();
virtual         ~NslObject();   
virtual int     init();
virtual int     recv(ePacket_ *); 
virtual int     send(ePacket_ *); 
virtual int     get(ePacket_ *, MBinder *);
virtual int     put(ePacket_ *, MBinder *);
virtual ePacket_    *put1(ePacket_ *, MBinder *);
virtual int     command(int argc, const char *argv[]); 
virtual int     Debugger();


inline  void    set_port(u_int32_t portid) { 
        portid_ = portid; 
    };   
inline u_int32_t get_port() const { 
        return(portid_); 
    }; 
inline struct plist* get_portls() const {
        return(MPlist_);
    };
inline const char * get_name() const {
        return(name_);
    }
inline u_int32_t get_nid() const {
        return(nodeID_);
    }
inline u_int32_t get_type() const {
        return(nodeType_);
    }
    //--------------------------------------------------------

  static  void Set_KeyPair(void);

//  NslObject(const KeyPair &newKeyPair):
//  newKeyPair(newKeyPair) {
//  }
 //NslObject( KeyPair &other, u_int32_t &N_ID, u_int32_t &N_Type) : newKeyPair(other),nodeID_     (N_ID),nodeType_ (N_Type)  {}



 /*  Key(const BigInt &modulus, const BigInt &exponent) :
modulus(modulus), exponent(exponent) {
}*/

};


/* Added by CCLin to uniformly format
* debugging messages.
*/

 #define NSLOBJ_DEBUG_STRING_HEAD() do {                \
double sec;                     \
TICK_TO_SEC(sec, GetCurrentTime());         \
printf("%11.7f: [%03d]%s::%s: ",            \
        sec, get_nid(),             \
        getModuleName(this), __FUNCTION__); \
} while(0)

 #endif /* __NCTUNS_object_h__ */

在Object.cc中

in Object.cc

void Set_KeyPair()
{
unsigned long int keyLength = 10;
//static KeyPair ADD(RSA::GenerateKeyPair(keyLength));
NslObject::newKeyPair  (RSA::GenerateKeyPair(keyLength));

//NslObject::KeyPtr
//NslObject::newKeyPair;
}

所以,我的问题是当编译器开始编译时停止在这个代码:

so, my problem is when the compiler starts compiling it stops on this code :

NslObject::newKeyPair  (RSA::GenerateKeyPair(keyLength));

,出现的讯息是:

Error:
object.cc: In function ‘void Set_KeyPair()’:
object.cc:53: error: no match for call to ‘(KeyPair) (KeyPair&)’

所以,我如何将一个生成的密钥对类值分配给NslObject :: newKeyPair。

so, how could i assign a generated keypair class value to NslObject::newKeyPair.

您的帮助是提前高度赞赏&谢谢 。

your helping is highly appreciated in advance & thank you .

推荐答案

如果要为其分配一个新值,则需要使用赋值:

If you want to assign it with a new value, then you need to use assignment:

NslObject::newKeyPair = RSA::GenerateKeyPair(keyLength);

您的代码试图调用它像一个函数,而不工作,因为它不是

Your code tries to call it like a function instead, with doesn't work because it isn't a functor.

(此外,您不应使用预留名称为您的包括卫兵。)

(Also, you shouldn't use reserved names for your include guards.)

这篇关于如何可以将类值分配给C ++中的另一个嵌套类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆