2013-07-17 2 views
0

это первый раз, когда я задаю свой вопрос в Stackoverflow. мой qustion это я получил это сообщение, когда я пытаюсь запустить этот код:Как назначить значение класса другим вложенным классам в C++

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

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

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

так, моя проблема в том, когда компилятор начинает сбор он останавливается на этом коде:

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

и появилось сообщение:

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

так, как я могу назначить сгенерированное значение класса keypair для NslObject :: newKeyPair.

Ваша помощь очень ценится заранее & спасибо.

+1

Попытка объявить переменную? NslObject :: newKeyPair var (RSA :: GenerateKeyPair (keyLength)); –

+0

Что такое тип возврата RSA :: GenerateKeyPair? –

+1

@DmitrySazonov: Нет, 'newKeyPair' является переменной-членом, а не типом. –

ответ

0

Если вы хотите, чтобы назначить его новым значением, то вам нужно использовать назначение:

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

Ваш код пытается вызвать его как функцию вместо этого, с не работает, потому что это не функтор.

(Кроме того, вы не должны использовать reserved names для включаемых охранников.)

+0

Благодарим вас за быстрый повтор ... возвращаемый тип RSA :: GenerateKeyPair - это класс KeyPair. – user2590797

+0

oops !!!. когда я пробовал этот код: NslObject :: newKeyPair = RSA :: GenerateKeyPair (keyLength); Я получил это сообщение: ./KeyPair.h:39: ошибка: нестатический const member 'const Key KeyPair :: privateKey', не может использовать оператор присваивания по умолчанию ???? – user2590797

+0

@ user2590797: Это касается кода, который вы не разместили, поэтому я могу только догадываться; но похоже, что вы пытаетесь назначить переменную 'const'. 'const' означает, что вы не можете его изменить. –

Смежные вопросы