0

Visual Studio 2010 では、

エラー 1 エラー LNK2019: 未解決の外部シンボル "public: __thiscall Server::Server(class boost::asio::io_service &)" (??0Server@@QAE@AAVio_service@asio@boost@@@Z) 関数で参照_main C:\Users\Lucie\Documents\Visual Studio 2010\Projects\Expérimentation Server\Expérimentation Server\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<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();
}

どんな助けでも大歓迎です。

4

2 に答える 2

2

ソースとヘッダーを含めて新しいプロジェクトを作成し、プロジェクトをコンパイルしました。しかたがない。

于 2013-01-22T05:54:05.727 に答える
0

Server.cpp をコンパイルしていないためです。代わりに、Main_server.cpp ファイルのみをコンパイルしました。今回は、リンカーは Server.obj を認識せず、これにより、取得したようなリンク エラーがポップアップ表示されます (未定義のコピー コンストラクター)。プロジェクトを作成してすべてのファイルを追加するか(あなたがしたように)、コンパイルされたままになっているcppファイルをコンパイルして、そのobjを生成します。また、makefile を使用することもできます。これは、他の 2 つのオプションよりも優れています。

于 2013-02-04T09:33:54.420 に答える