How to assign class value to other nested classes in C ++

This is the first time I asked my question on Stackoverflow. my qustion, I received this message when I try 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__ */ 

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 at this code:

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

and the message that appears:

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

So, how can I assign the class value of the generated key pair to NslObject :: newKeyPair.

Your help is much appreciated in advance and thank you.

0
source share
1 answer

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

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

Your code tries to call it as a function, but does not work, because it is not a functor.

(In addition, you should not use reserved names for your included guards.)

0
source

Source: https://habr.com/ru/post/1492560/


All Articles