如何可以将类值分配给C ++中的另一个嵌套类 [英] How can assign a class value to another nested classes in 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屋!