C ++ LNK2019 (entre les classes de projet)
-
04-10-2019 - |
Question
J'ai une erreur très étrange: quand je veux utiliser la classe SocialServer::Client
de ma classe SocialServer::Server
, l'éditeur de liens m'a jeté deux LNK2019 erreurs:
Error 1 error LNK2019: unresolved external symbol "public: void __thiscall SocialServer::Client::Handle(void)" (?Handle@Client@SocialServer@@QAEXXZ) referenced in function "private: static unsigned int __stdcall SocialServer::Server::listenThread(void *)" (?listenThread@Server@SocialServer@@CGIPAX@Z) C:\Users\benjamin\Documents\Visual Studio 2010\Projects\FCX Social Server\SocialServer Core\Server.obj SocialServer Core
Error 2 error LNK2019: unresolved external symbol "public: __thiscall SocialServer::Client::Client(unsigned int)" (??0Client@SocialServer@@QAE@I@Z) referenced in function "private: static unsigned int __stdcall SocialServer::Server::listenThread(void *)" (?listenThread@Server@SocialServer@@CGIPAX@Z) C:\Users\benjamin\Documents\Visual Studio 2010\Projects\FCX Social Server\SocialServer Core\Server.obj SocialServer Core
Cependant, ces fonctions manquantes 2 sont mises en œuvre correctement:
Client.h
#pragma once
#include "dll.h"
namespace SocialServer
{
class __social_class Client
{
public:
Client(SOCKET sock);
~Client();
void Handle();
private:
static unsigned __stdcall clientThread(void* value);
SOCKET _socket;
uintptr_t _thread;
unsigned int _thread_id;
};
}
Client.cpp
#pragma once
#include "Client.h"
namespace SocialServer
{
Client::Client(SOCKET socket)
{
this->_socket = socket;
}
Client::~Client()
{
}
void Client::Handle()
{
std::cout << " New client " << std::endl;
this->_thread = _beginthreadex(NULL, 0, Client::clientThread, &this->_socket, CREATE_SUSPENDED, &this->_thread_id);
ResumeThread((HANDLE)this->_thread);
}
unsigned __stdcall Client::clientThread(void* value)
{
// Some code to execute here ...
}
}
D'où vient le problème vient?
La solution
J'ai trouvé la solution. Dans une fonction qui est utilisée par _beginthreadex () (avec __stdcall non signé), ajoutez toujours un retour à la fin.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow