2012-04-02 64 views
0

我真的很困惑如何将枚举类型传递给函数在c + +。 我使用谷歌搜索和测试所提供的所有溶剂,但他们没有解决我的问题。 在SocketInfo.h, 我有一个名为SocketType枚举,全球声明:通过枚举函数在c + +

typedef enum SocketTypeEnum 
{ 
    SOCKET_TYPE_IPSEC 
} SocketType; 
在SocketInfo.hi

有一个名为SocketInfo类:在SocketInfo.cpp

class SocketInfo 
{ 
public: 
    SocketInfo(const char* ip,unsigned short fd,SocketType stype); 
} 

SocketInfo::SocketInfo(const char* ip, unsigned short fd,SocketType stype) 
{ 
    //some work done here 
} 

我建立这个类没有任何错误

现在测试这个类我创建application.in的_tmain我写这篇文章的代码

#include "SocketInfo.h" 

void Test_Socket() 
{ 
    SocketInfo* si = new SocketInfo(NULL,5060,SOCKET_TYPE_IPSEC); 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    Test_Socket(); 
    getch(); 
    return 0; 
} 

上面的代码运行后,我得到了这些错误的一个Win32控制台:

错误4错误LNK2019:无法解析的外部符号“ public:__thiscall函数“void __cdecl Test_Socket(void)”(?Test_Socket @@ YAXXZ)中引用的SocketInfo :: SocketInfo(char const *,unsigned short,enum SocketTypeEnum)“(?? 0SocketInfo @@ QAE @ PBDGW4SocketTypeEnum @@@ Z) )

错误5错误LNK1120:1个未解决的外部问题

我该如何解决这些错误。

所有代码在visual studio 2010 Ultimate上编译。

回答

2

问题不在于如何通过enum作为参数,这没关系,但是您不会从项目导出符号或将它们导入到测试项目中。

您需要将定义SocketInfo的项目生成的lib文件添加到测试项目的其他依赖项。

您还需要导出类:

_declspec(dllexport) class SocketInfo 
{ 
public: 
    SocketInfo(const char* ip,unsigned short fd,SocketType stype); 
}; 

_declspec(dllimport)它导入测试项目。这种双重性通常是通过宏来实现的 - 查找它。

+0

谢谢陆,,问题解决了。 – 2012-04-02 13:11:07