boost::将 asio 与 accepter.async_accept 一起使用时出现绑定错误
boost::bind error while using asio with accepter.async_accept
我正在 http://gwenael-dunand.developpez.com/tutoriels/cpp/boost/asio/上学习这个提升教程,它给了我很多错误
boost::bind(&tcp_server::handle_accept, this, new_connection, boost::asio::placeholders::error);
我在这里使用它
m_acceptor.async_accept(new_connection.socket(), boost::bind(&tcp_server::handle_accept, this, new_connection, boost::asio::placeholders::error));
我因为这条线的 pres 而遇到这个巨大的错误
In file included from /usr/include/boost/asio/basic_socket.hpp:24,
from /usr/include/boost/asio/basic_datagram_socket.hpp:25,
from /usr/include/boost/asio.hpp:20,
from /home/dipro/Development/asio/main.cpp:5:
/usr/include/boost/noncopyable.hpp: In copy constructor ‘boost::asio::basic_io_object<boost::asio::stream_socket_service<boost::asio::ip::tcp> >::basic_io_object(const boost::asio::basic_io_object<boost::asio::stream_socket_service<boost::asio::ip::tcp> >&)’:
/usr/include/boost/noncopyable.hpp:27: error: ‘boost::noncopyable_::noncopyable::noncopyable(const boost::noncopyable_::noncopyable&)’ is private
/usr/include/boost/asio/basic_io_object.hpp:30: error: within this context
In file included from /usr/include/boost/asio/datagram_socket_service.hpp:33,
from /usr/include/boost/asio/basic_datagram_socket.hpp:26,
from /usr/include/boost/asio.hpp:20,
from /home/dipro/Development/asio/main.cpp:5:
/usr/include/boost/noncopyable.hpp: In copy constructor ‘boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp, boost::asio::detail::epoll_reactor<false> >::implementation_type::implementation_type(const boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp, boost::asio::detail::epoll_reactor<false> >::implementation_type&)’:
/usr/include/boost/noncopyable.hpp:27: error: ‘boost::noncopyable_::noncopyable::noncopyable(const boost::noncopyable_::noncopyable&)’ is private
/usr/include/boost/asio/detail/reactive_socket_service.hpp:58: error: within this context
In file included from /usr/include/boost/asio/basic_socket.hpp:24,
from /usr/include/boost/asio/basic_datagram_socket.hpp:25,
from /usr/include/boost/asio.hpp:20,
from /home/dipro/Development/asio/main.cpp:5:
/usr/include/boost/asio/basic_io_object.hpp: In copy constructor ‘boost::asio::basic_io_object<boost::asio::stream_socket_service<boost::asio::ip::tcp> >::basic_io_object(const boost::asio::basic_io_object<boost::asio::stream_socket_service<boost::asio::ip::tcp> >&)’:
/usr/include/boost/asio/basic_io_object.hpp:30: note: synthesized method ‘boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp, boost::asio::detail::epoll_reactor<false> >::implementation_type::implementation_type(const boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp, boost::asio::detail::epoll_reactor<false> >::implementation_type&)’ first required here
In file included from /usr/include/boost/asio/basic_datagram_socket.hpp:25,
from /usr/include/boost/asio.hpp:20,
from /home/dipro/Development/asio/main.cpp:5:
/usr/include/boost/asio/basic_socket.hpp: In copy constructor ‘boost::asio::basic_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >::basic_socket(const boost::asio::basic_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >&)’:
/usr/include/boost/asio/basic_socket.hpp:45: note: synthesized method ‘boost::asio::basic_io_object<boost::asio::stream_socket_service<boost::asio::ip::tcp> >::basic_io_object(const boost::asio::basic_io_object<boost::asio::stream_socket_service<boost::asio::ip::tcp> >&)’ first required here
In file included from /usr/include/boost/asio.hpp:28,
from /home/dipro/Development/asio/main.cpp:5:
/usr/include/boost/asio/basic_stream_socket.hpp: In copy constructor ‘boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >::basic_stream_socket(const boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >&)’:
/usr/include/boost/asio/basic_stream_socket.hpp:49: note: synthesized method ‘boost::asio::basic_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >::basic_socket(const boost::asio::basic_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >&)’ first required here
/home/dipro/Development/asio/main.cpp: In copy constructor ‘tcp_connection::tcp_connection(const tcp_connection&)’:
/home/dipro/Development/asio/main.cpp:9: note: synthesized method ‘boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >::basic_stream_socket(const boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >&)’ first required here
/home/dipro/Development/asio/main.cpp: In member function ‘void tcp_server::start_accept()’:
/home/dipro/Development/asio/main.cpp:39: note: synthesized method ‘tcp_connection::tcp_connection(const tcp_connection&)’ first required here
/home/dipro/Development/asio/main.cpp:39: error: initializing argument 3 of ‘boost::_bi::bind_t<R, boost::_mfi::mf2<R, T, A1, A2>, typename boost::_bi::list_av_3<A1, A2, A3>::type> boost::bind(R (T::*)(B1, B2), A1, A2, A3) [with R = void, T = tcp_server, B1 = tcp_connection&, B2 = const boost::system::error_code&, A1 = tcp_server*, A2 = tcp_connection, A3 = boost::arg<1> (*)()]’
make[2]: *** [CMakeFiles/asio.dir/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/asio.dir/all] Error 2
make: *** [all] Error 2
dipro@bong:~/Development/asio/build$
该教程似乎有一个错误。参数new_connection
是通过引用获取的,因此绑定需要使用boost::ref
,否则它将尝试复制它,并且由于错误显示该类型不可复制。将绑定更改为:
boost::bind(
&tcp_server::handle_accept
, this
, boost::ref(new_connection) // << pass by reference
, boost::asio::placeholders::error);
相关文章:
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 为什么 std::绑定错误参数可以成功?
- 运行时错误:引用绑定到类型为"int"的空指针
- 运行时错误:引用绑定到类型"int"的未对齐地址0xbebebebebebebec6,这需要 4 个字节对齐 (stl_vector.h)
- 在其他容器中使用 boost::container::static_vector 时,GCC 编译错误"将'const s'绑定到类型's&'的引用丢弃限定符"
- 为什么定义复制构造函数会给我错误:无法将类型 'obj&' 的非常量左值引用绑定到类型为"obj"的右值?
- 错误:对类型 'const ItemInstance' 的引用无法绑定到类型 'void' 的右值
- 有没有一种方法可以让OpenCLC++绑定为所有错误抛出异常
- 错误:在类型 "blah blah" 的绑定引用中删除限定符以初始化"some other blah blah"
- 为什么按引用传入会导致绑定引用类型错误
- 错误:无法将"std::istream {aka std::basic_istream<char>}"lvalue 绑定到"std::basic_istream&<char>&
- 返回非常量引用会导致绑定引用错误
- UDP服务器绑定到错误的端口号
- 在 Mac 上C++编译代码时处理“dyld:惰性符号绑定失败:找不到符号”错误
- 错误:绑定到类型引用会丢弃限定符
- 在绑定中捕获 fortran 运行时错误和信号C++
- 在 ZeroMQ 中绑定订阅者套接字并连接发布者套接字会在代码运行时给出错误.为什么
- 提升 ASIO 绑定:错误的文件描述符
- std::绑定到 lambda: 编译错误
- 错误:将"const double"绑定到类型为"double&"的引用会丢弃限定符