以下是在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的错误吗?
在这两行中:
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)
| 归档时间: |
|
| 查看次数: |
1003 次 |
| 最近记录: |