我已多次尝试解决这个问题,但我一无所获.
此代码的主要用途是在嵌套类NslObject :: KeyK或NewKeyPair1中保存对键(公共和私有).
.cpp文件
unsigned long int keyLength = 10;
//KeyPair ADD(RSA::GenerateKeyPair(keyLength));
NslObject::KeyK(RSA::GenerateKeyPair(keyLength));
typedef NslObject::KeyK NewKeyPair1;
NewKeyPair1(RSA::GenerateKeyPair(keyLength));
//NslObject::
Key OtmanK(NslObject::Get_PublicKey(NewKeyPair1));
.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_;
// static KeyPair NewKeyPair;
public :
/* add for new structure engine*/
u_int32_t pdepth;
struct MBlist *BinderList;
u_int8_t PortNum;
//------------------------------------------------
class KeyK {
private :
KeyPair Kk;
public:
KeyK( KeyPair D1): Kk(D1)
{}
const Key &GetPrivateKey() const
{
return Kk.GetPrivateKey();
}
const Key &GetPublicKey() const
{
return Kk.GetPublicKey();
}
//KeyK NewKeyPair ;
};
Key Get_PrivateKey(KeyK &K){
return K.GetPrivateKey();
}
Key Get_PublicKey(KeyK &K){
return K.GetPublicKey();
}
//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_);
}
//--------------------------------------------------------
};
那么,cpp文件中这一行的问题:
Key OtmanK(NslObject::Get_PublicKey(NewKeyPair1));
当我试图编译这个项目时,我收到此错误消息:
object.cc:87: error: expected primary-expression before ‘)’ token
请帮我.
当我试图对密钥类进行定向调用时,出现了另一个问题,例如:
unsigned long int keyLength = 10;
//KeyPair ADD(RSA::GenerateKeyPair(keyLength));
NslObject::KeyK(RSA::GenerateKeyPair(keyLength));
typedef NslObject::KeyK NewKeyPair1;
NewKeyPair1(RSA::GenerateKeyPair(keyLength));
//NslObject::
//Key OtmanK(NewKeyPair1.GetPublicKey());
std::string message = "othman Alkilany";
// NslObject::NewKeyPair.GetPrivateKey()
std::string cypherText = RSA::Encrypt( message, NewKeyPair1.GetPublicKey());
错误消息是:
error: expected primary-expression before ‘.’ token
最佳答案 我想你的问题在第二行:
typedef NslObject::KeyK NewKeyPair1;
NewKeyPair1(RSA::GenerateKeyPair(keyLength));
解析typedef你基本上写了以下内容:
NslObject::KeyK(RSA::GenerateKeyPair(keyLength));
所以你可以清楚地看到你错过了这一行的变量名.
要解决此问题,请为变量/对象命名:
NewKeyPair1 somekeypair(RSA::GenerateKeyPair(keyLength));
但是,我猜你还是误用了typedef?您是否尝试将NewKeyPair1命名为?像这样的东西:
NslObject::KeyK NewKeyPair1(RSA::GenerateKeyPair(keyLength));