LNK2019, boost::asio

LNK2019, boost::asio

本文关键字:asio boost LNK2019      更新时间:2023-10-16

在visual studio 2010中,我得到

错误1错误LNK2019:未解析的外部符号"public: __thiscall "Server::Server(类boost::asio::io_service &)"(??0Server@@QAE@AAVio_service@asio@boost@@@ z)中引用的C:UsersLucieDocumentsVisual Studio2010 项目实验Serveur 实验Serveur Main_Serveur.obj

然而,我有头文件中的类定义和.cpp文件中的类实现都包含在解决方案中,所以我真的不明白为什么我得到这个。此外,我检查了一下,定义和声明似乎是匹配的。

这里是main_server .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<boostbind.hpp>
#include<boostasio.hpp>
#include<boostshared_ptr.hpp>
#include<boostenable_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<boostasio.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();
}

最终创建了一个新项目,并包括源文件和头文件,并编译了该项目。哦。

必须,因为您不会编译Server.cpp。相反,您只编译main_server .cpp文件。这一次,链接器看不到服务器。Obj,这会弹出链接错误,就像你得到的(未定义的复制构造函数)您可以创建项目,将所有文件添加到其中(就像您所做的那样),或者编译cpp文件,这些文件将被单独编译以生成它的objs。此外,您还可以使用makefile,它比其他两个选项要好。