C++在GCC上使用已删除的功能但在MSVC上没有使用

Adr*_*anu 2 c++ gcc boost

以下是在msvc上编译而不是在gcc上编译.为什么?

game_tracker.cpp:

#include "stdafx.hpp"
#include "game_tracker.hpp"
#include "basic_game_server.hpp"
#include "basic_session.hpp"
#include "api_session.hpp"
#include "protocols.hpp"

using namespace boost::asio;
using namespace std;

namespace games_zone{

    game_tracker::game_tracker(unsigned short port) : tracker_(io_service(thread::hardware_concurrency())),
        api_(io_service(thread::hardware_concurrency())),
        acceptor_(api_, ip::tcp::endpoint(ip::tcp::v4(), port), false),
        socket_(api_)
    {
        tracker_work_ = new boost::asio::io_service::work(tracker_);
        api_work_ = new boost::asio::io_service::work(api_);

        protocols::hl_game_server gs(boost::asio::ip::address_v4::from_string("89.44.246.184"), 27015);
        add(gs);
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

game_tracker.hpp:

#pragma once

#include "basic_game_server.hpp"

namespace games_zone{
    class game_tracker :
        private boost::noncopyable
    {
    public:
        game_tracker(unsigned short);
        ~game_tracker();
        void run();
    private:
        boost::asio::io_service tracker_;
        boost::asio::io_service api_;
        boost::asio::ip::tcp::acceptor acceptor_;
        boost::asio::ip::tcp::socket socket_;
        boost::asio::io_service::work* tracker_work_;
        boost::asio::io_service::work* api_work_;
        std::vector<basic_game_server*> servers_;

        void add(basic_game_server&);
        void do_accept();
    };
}
Run Code Online (Sandbox Code Playgroud)

gcc错误:

root@ubuntu:~/gz_tracker/build# make
Scanning dependencies of target gz_tracker
[ 16%] Building CXX object games_zone/CMakeFiles/gz_tracker.dir/game_tracker.cpp.o
/root/gz_tracker/games_zone/game_tracker.cpp: In constructor ‘games_zone::game_tracker::game_tracker(short unsigned int)’:
/root/gz_tracker/games_zone/game_tracker.cpp:16:15: error: use of deleted function ‘boost::asio::io_service::io_service(const boost::asio::io_service&)’
   socket_(api_)
               ^
In file included from /usr/local/include/boost/asio/basic_io_object.hpp:19:0,
                 from /usr/local/include/boost/asio/basic_socket.hpp:20,
                 from /usr/local/include/boost/asio/basic_datagram_socket.hpp:20,
                 from /usr/local/include/boost/asio.hpp:21,
                 from /root/gz_tracker/games_zone/stdafx.hpp:10,
                 from /root/gz_tracker/games_zone/game_tracker.cpp:1:
/usr/local/include/boost/asio/io_service.hpp:185:7: note: ‘boost::asio::io_service::io_service(const boost::asio::io_service&)’ is implicitly deleted because the default definition would be ill-formed:
 class io_service
       ^
In file included from /usr/local/include/boost/asio/io_service.hpp:23:0,
                 from /usr/local/include/boost/asio/basic_io_object.hpp:19,
                 from /usr/local/include/boost/asio/basic_socket.hpp:20,
                 from /usr/local/include/boost/asio/basic_datagram_socket.hpp:20,
                 from /usr/local/include/boost/asio.hpp:21,
                 from /root/gz_tracker/games_zone/stdafx.hpp:10,
                 from /root/gz_tracker/games_zone/game_tracker.cpp:1:
/usr/local/include/boost/asio/detail/noncopyable.hpp:32:3: error: ‘boost::asio::detail::noncopyable::noncopyable(const boost::asio::detail::noncopyable&)’ is private
   noncopyable(const noncopyable&);
   ^
In file included from /usr/local/include/boost/asio/basic_io_object.hpp:19:0,
                 from /usr/local/include/boost/asio/basic_socket.hpp:20,
                 from /usr/local/include/boost/asio/basic_datagram_socket.hpp:20,
                 from /usr/local/include/boost/asio.hpp:21,
                 from /root/gz_tracker/games_zone/stdafx.hpp:10,
                 from /root/gz_tracker/games_zone/game_tracker.cpp:1:
/usr/local/include/boost/asio/io_service.hpp:185:7: error: within this context
 class io_service
       ^
/root/gz_tracker/games_zone/game_tracker.cpp:16:15: error: use of deleted function ‘boost::asio::io_service::io_service(const boost::asio::io_service&)’
   socket_(api_)
               ^
make[2]: *** [games_zone/CMakeFiles/gz_tracker.dir/game_tracker.cpp.o] Error 1
make[1]: *** [games_zone/CMakeFiles/gz_tracker.dir/all] Error 2
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)

我使用boost 1.55(当前版本)并在Microsoft Visual Studio 2013上编译和运行.我从这个api_无法绑定的错误中理解explicit basic_stream_socket(boost::asio::io_service & io_service);

我错了什么?这是GCC的错误吗?

eth*_*ger 7

在这两行中:

tracker_(io_service(thread::hardware_concurrency())),
api_(io_service(thread::hardware_concurrency())),
Run Code Online (Sandbox Code Playgroud)

您正在创建一个临时文件io_service并将其复制到您的成员变量中(由于复制构造函数是私有的,因此不允许).

试试吧

tracker_(thread::hardware_concurrency()),
api_(thread::hardware_concurrency()),
Run Code Online (Sandbox Code Playgroud)