Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法将可移动对象与Boost.Asio一起使用_C++_Boost_C++11_Boost Asio - Fatal编程技术网

C++ 无法将可移动对象与Boost.Asio一起使用

C++ 无法将可移动对象与Boost.Asio一起使用,c++,boost,c++11,boost-asio,C++,Boost,C++11,Boost Asio,在阅读中,我得到了这样一个印象:这个代码应该可以工作: class Connection : public std::enable_shared_from_this<Connection> { public: Connection(tcp::socket&& socket) : socket_(std::move(socket)) {} private: tcp::socket socket_; }; 在包含ASIO头之前,需要定义BOOST\u A

在阅读中,我得到了这样一个印象:这个代码应该可以工作:

class Connection : public std::enable_shared_from_this<Connection>
{
public:
    Connection(tcp::socket&& socket) : socket_(std::move(socket)) {}
private:
    tcp::socket socket_;
};

在包含ASIO头之前,需要定义
BOOST\u ASIO\u MOVE
。如果没有,则移动支持将被禁用。请参阅asio/basic\U stream\U socket.hpp


您能展示调用
Connecion
constructor的代码吗?@Igor:我在main()中使用了另一个服务器类,但连接类没有在任何地方使用。它只是声明的,所以您在调用隐式删除的复制构造函数时遇到了一个错误,但是没有代码构造
连接
对象?编译器是否提供错误实例化位置的跟踪?当调用构造函数的代码将套接字作为右值引用传递,而不是通过
std::move
将其转换为xvalue时,这个问题就会出现。这是突出显示的部分:std::move(socket)。据我所见,问题在于tcp::socket定义了一个移动构造函数,但没有复制构造函数,因此隐式复制构造函数被删除。请编辑您的问题,以包含一个演示该问题的最完整示例。明确地定义BOOST\u ASIO\u HAS\u MOVE对我不起作用。我不得不修改
/usr/include/boost/asio/detail/config.hpp
。我已经添加了
//Clang/libc++detection
,并替换了
//在已知允许移动构造和赋值的编译器上支持移动构造和赋值。
部分来自:
Call to implicitly-deleted copy constructor of 'tcp::socket' (aka'basic_stream_socket<boost::asio::ip::tcp>')
C++ Language dialect: GNU++11[-std=gnu++11]
C++ Standard Library: libc++(LLVM C++ standard library with C++11 support)