2012-04-02 13 views
0

Ich bin wirklich verwirrend darüber, wie ein Enum-Typ an eine Funktion in C++ übergeben. Ich google und teste alle vorgestellten Lösungen, aber keine von ihnen löst mein Problem. im SocketInfo.h, ich habe eine Enumeration namens socket, die global deklariert als:übergeben Enumeration in C++

typedef enum SocketTypeEnum 
{ 
    SOCKET_TYPE_IPSEC 
} SocketType; 

im SocketInfo.hi haben eine Klasse namens SocketInfo:

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

im SocketInfo.cpp:

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

i bauen diese Klasse ohne Fehler

jetzt Test diese Klasse mache ich eigentlich eine win32 Konsole application.in der _tmain ich diesen Code zu schreiben

#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; 
} 

nach oben Code ausgeführt ich diese Fehler bekam:

Fehler 4 Fehler LNK2019: nicht aufgelöstes externes Symbol " public: __thiscall SocketInfo :: SocketInfo (char const *, unsigned short, enum SocketTypeEnum) "(?? 0SocketInfo @@ QAE @ PBDGW4SocketTypeEnum @@@ Z) referenziert in der Funktion" void __cdecl Test_Socket (void) "(? Test_Socket @@ YAXXZ)

Fehler 5 Fehler LNK1120: 1 nicht aufgelöste externe

wie kann ich diese Fehler beheben.

alle Codes kompilieren auf Visual Studio 2010 Ultimate.

Antwort

2

Das Problem besteht nicht darin, wie Sie den enum als Parameter übergeben, was in Ordnung ist, aber dass Sie keine Symbole aus Ihrem Projekt exportieren oder sie in Ihr Testprojekt importieren.

Sie müssen die Datei lib, die vom Projekt generiert wurde, zu den zusätzlichen Abhängigkeiten des Testprojekts hinzufügen, die SocketInfo definiert.

Sie müssen auch die Klasse exportieren:

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

und es in dem Testprojekt mit _declspec(dllimport) importieren. Diese Dualität wird normalerweise durch Makros erreicht - schauen Sie nach.

+0

Danke Luchian, Problem gelöst. –