2012-04-02 65 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