2012-04-02 1 views
0

Я действительно запутался в том, как передать тип перечисления функции в C++. Я googling и проверить все представленные soloutions, но не из них решить мою проблему. в SocketInfo.h, у меня есть перечисление с именем SocketType, что объявленное во всем мире как:pass Перечисление для функции в C++

typedef enum SocketTypeEnum 
{ 
    SOCKET_TYPE_IPSEC 
} SocketType; 

в SocketInfo.hi есть класс с именем SocketInfo:

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

в SocketInfo.cpp:

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

я построить этот класс без каких-либо ошибок

теперь для испытаний этот класс я создать win32 консоль 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; 
} 

после запуска выше кода я получил эти ошибки:

Ошибка 4 Ошибка LNK2019: неразрешенный внешний символ " public: __thiscall SocketInfo :: SocketInfo (char const *, unsigned short, enum SocketTypeEnum) "(? 0SocketInfo @@ QAE @ PBDGW4SocketTypeEnum @@@ Z) ссылка на функцию" void __cdecl Test_Socket (void) "(? Test_Socket @@ YAXXZ)

Ошибка 5 error LNK1120: 1 нерешенных внешних

как я могу решить эти ошибки.

все коды составлены на визуальной студии 2010 Ultimate.

ответ

2

Проблема заключается не в том, как вы передаете enum в качестве параметра, что хорошо, но что вы не экспортируете символы из своего проекта или не импортируете их в свой тестовый проект.

Необходимо добавить файл lib, сгенерированный проектом, определяющий SocketInfo на дополнительные зависимости тестового проекта.

Кроме того, необходимо экспортировать класс:

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

и импортировать его в тестовый проект с _declspec(dllimport). Эта двойственность обычно достигается с помощью макросов - посмотрите.

+0

Спасибо Лучиан, проблема решена. –

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