2013-01-22 15 views
0

在Visual Studio 2010中,我得到LNK2019,提高:: ASIO

错误1错误LNK2019:无法解析的外部符号“公用:__thiscall 服务器::服务器(类boost ::支持ASIO :: io_service对象&) “ (?? 0Server @@ QAE @ AAVio_service @ asio @ boost @@@ Z) 函数_main C:\ Users \ Lucie \ Documents \ Visual Studio 2010 \ Projects \ExpérimentationServeur \Expérimentation Serveur \ Main_Serveur .obj

但是,我在解决方案中包含的头文件和.cpp文件中的类实现中都有类定义,所以我真的不明白为什么我要这样做。此外,我已经检查了,定义和声明似乎相符。

这里是Main_Serveur.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:

#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'是必须实际构建的(少数)Boost库之一。它不仅仅是头文件 - 你必须构建你需要的组件并配置Visual Studio,以便它能找到这些位。 –

+0

请参阅Boost入门指南的第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,并且弹出链接错误就像你已经得到(未定义的复制构造函数)。你要么创建项目添加所有文件(像你一样),要么编译cpp文件,这些文件需要编译分离才能生成它的objs。另外,你可以使用makefile,这比其他两个选项更好。

相关问题