2
以下內容在msvc上編譯,而不是在gcc上編譯。爲什麼?C++在GCC上使用已刪除的函數但在MSVC上不使用
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);
}
...
}
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();
};
}
GCC錯誤:
[email protected]:~/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
我使用升壓1.55(當前版本),並編譯和運行微軟Visual Studio 2013. 我明白這個錯誤api_
無法綁定到explicit basic_stream_socket(boost::asio::io_service & io_service);
我錯了什麼?這是一個GCC錯誤?
謝謝。我是否認爲這個錯誤對此沒有太大的幫助? –
這些錯誤非常有用。 (1)您正在使用已刪除的構造函數io_service(io_service&)。 (2)構造函數被刪除,因爲定義不合格。 (3)由於顯式不可複製,io_service(io_service&)是私有的。 – etheranger
從那裏,只需使用該複製構造函數查找代碼(錯誤地)的地方。 – etheranger