2013-01-22 4 views
0

을 비주얼 스튜디오 2010 년, 내가 할LNK2019, 부스트 : ASIO

오류 1 오류 LNK2019을 : 확인되지 않은 외부 기호 "공공 : __thiscall 서버 :: 서버 (클래스 향상을 :: ASIO :: io_service &를) " 기능 _main의 C에서 참조 (?? 0Server @@ QAE @ AAVio_service @ ASIO @ 부스트 @@@ Z) : \ 사용자 \ 루시 \ 문서는 \ 실험 Serveur \ 실험 Serveur \ Main_Serveur 프로젝트 \ 비주얼 스튜디오 2010 \ .obj

그러나 헤더 파일에 클래스 정의가 있고 솔루션에 포함 된 .cpp 파일의 클래스 구현이 있으므로이 이유가 실제로 나타나지 않습니다. 더욱이, 나는 검사했고, 정의와 선언이 일치하는 것 같다.

include <ctime> 
#include <iostream> 
#include <string> 
#include <vector> 
#include <hash_map> 
#include <functional> 
#include <boost/bind.hpp> 
#include <algorithm> 
#include <boost/shared_ptr.hpp> 
#include <boost/enable_shared_from_this.hpp> 
#include <boost/asio.hpp> 
#include <hash_set> 

#include "Connection.h" 
#include "Server.h" 

using boost::asio::ip::tcp; 
int main() 
{ 
    try 
    { 
     boost::asio::io_service io_service; 
     Server server(io_service); 
     io_service.run(); 
    } 
    catch (std::exception& e) 
    { 
     std::cerr << e.what() << std::endl; 
    } 
    std::cin.get(); 
    return 0; 
} 
여기

입니다 Server.h : 여기

는 Main_Serveur.cpp입니다

#ifndef __SERVER_H__ 
#define __SERVER_H__ 
#include"Connection.h" 
#include<boost\bind.hpp> 
#include<boost\asio.hpp> 
#include<boost\shared_ptr.hpp> 
#include<boost\enable_shared_from_this.hpp> 
#include<hash_set> 
#include<string> 
using boost::asio::ip::tcp; 

class Connection; 
class Server : public boost::enable_shared_from_this<Server> 
{ 
public: 
    Server(boost::asio::io_service & io_service); 
    void removeSocketFromList(tcp::socket * socketToRemove); 
    void sendToList(std::string message); 
    void addSocketToList(tcp::socket * newSocket); 

private: 
    void start_accept(); 
    void handle_accept 
    (
     boost::shared_ptr<Connection> new_connection, 
     const boost::system::error_code& error 
    ); 


    std::hash_set<tcp::socket*> sockets_; 
    tcp::acceptor acceptor_; 
}; 
#endif 

을 그리고 여기 Server.cpp의 관련 부분입니다 :

#include"Server.h" 
#include"Connection.h" 

#include<boost\asio.hpp> 
#include<hash_set> 
using boost::asio::ip::tcp; 

Server::Server(boost::asio::io_service & io_service): 
acceptor_(io_service, tcp::endpoint(tcp::v4(), 13)) 
{ 
    start_accept(); 
} 

어떤 도움 대단히 감사하겠습니다.

+0

'boost :: asio'는 실제로 구축되어야하는 (몇 가지) 부스트 라이브러리 중 하나입니다. 헤더 만이 아닙니다. 필요한 구성 요소를 만들고 Visual Studio에서 비트를 찾을 수 있도록 구성해야합니다. –

+0

부스트 시작 가이드의 섹션 5를 참조하십시오. http://www.boost.org/doc/libs/1_52_0/more/getting_started/windows.html#prepare-to-use-a-boost-library-binary –

+0

boost :: asio 컴파일되고 잠시 동안 잘 작동합니다. 나는 boost :: asio가 문제의 원인이라고 확신하지 않는다. 구조에 대한 새로운 추가가 작동을 멈출 때까지, 소프트웨어는 잠시 동안 잘 작동했습니다. 나는 그 추가가 어떻게 관련되는지 보지 않는다; 대부분 링커와 관련이없는 해시 셋에 소켓 포인터를 추가하는 작업이 포함됩니다. – Julius

답변

1

새 프로젝트를 만들고 소스와 헤더 및 프로젝트를 컴파일하는 작업을 마쳤습니다. 오 잘.

0

Server.cpp를 컴파일하지 않았으므로 반드시 있어야합니다. 대신 Main_serveur.cpp 파일 만 컴파일했습니다. 이번에는 링커가 Server.obj를 보지 못해서 링크 오류가 발생했습니다 (정의되지 않은 복사 생성자). 프로젝트에 모든 파일을 추가하거나 (또는 ​​그랬던 것처럼) 컴파일 된 파일을 컴파일하여 obj를 생성 할 수 있습니다. 또한 makefile을 사용할 수 있는데, 이는 다른 두 옵션보다 낫다.