错误:尝试使用 boost::asio::async_read 读取时,"类提升::ASIO::mutable_buffer"中没有名为"const_iterator"的类型
error: no type named 'const_iterator' in 'class boost::asio::mutable_buffer' when trying to read using boost::asio::async_read
使用此代码编译错误。这很奇怪,因为它基本上是从我的另一个项目复制粘贴的。有什么线索吗?
void Connection::asyncReceiveHeader()
{
Buffer* header = new Buffer(packetHeaderSize);
ba::mutable_buffer buffer = ba::buffer(header->pointer(), header->size());
auto readHandler = bind(&Connection::headerReceived, this, ba::placeholders::error, ba::placeholders::bytes_transferred, header);
ba::async_read(socket, buffer, readHandler); // Comment this line out and it compiles (this is the line 70)
}
错误:
C:MinGWlibrariesboost-1.52include/boost/asio/detail/consuming_buffers.hpp: In instantiation of 'class boost::asio::detail::consuming_buffers<boost::asio::mutable_buffer, boost::asio::mutable_buffer>':
C:MinGWlibrariesboost-1.52include/boost/asio/impl/read.hpp:209:46: required from 'class boost::asio::detail::read_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp>, boost::asio::mutable_buffer, boost::asio::detail::transfer_all_t, boost::_bi::bind_t<void, boost::_mfi::mf3<void, network::Connection, const boost::system::error_code&, unsigned int, network::Buffer*>, boost::_bi::list4<boost::_bi::value<network::Connection*>, boost::arg<1> (*)(), boost::arg<2> (*)(), boost::_bi::value<network::Buffer*> > > >'
C:MinGWlibrariesboost-1.52include/boost/asio/impl/read.hpp:526:3: required from 'void boost::asio::async_read(AsyncReadStream&, const MutableBufferSequence&, ReadHandler&&) [with AsyncReadStream = boost::asio::basic_stream_socket<boost::asio::ip::tcp>; MutableBufferSequence = boost::asio::mutable_buffer; ReadHandler = boost::_bi::bind_t<void, boost::_mfi::mf3<void, network::Connection, const boost::system::error_code&, unsigned int, network::Buffer*>, boost::_bi::list4<boost::_bi::value<network::Connection*>, boost::arg<1> (*)(), boost::arg<2> (*)(), boost::_bi::value<network::Buffer*> > >&]'
..srcnetworkConnection.cpp:70:45: required from here
C:MinGWlibrariesboost-1.52include/boost/asio/detail/consuming_buffers.hpp:150:5: error: no type named 'const_iterator' in 'class boost::asio::mutable_buffer'
C:MinGWlibrariesboost-1.52include/boost/asio/detail/consuming_buffers.hpp:247:36: error: no type named 'const_iterator' in 'class boost::asio::mutable_buffer'
C:MinGWlibrariesboost-1.52include/boost/asio/detail/consuming_buffers.hpp: In instantiation of 'boost::asio::detail::consuming_buffers<Buffer, Buffers>::consuming_buffers(const Buffers&) [with Buffer = boost::asio::mutable_buffer; Buffers = boost::asio::mutable_buffer]':
C:MinGWlibrariesboost-1.52include/boost/asio/impl/read.hpp:158:60: required from 'boost::asio::detail::read_op<AsyncReadStream, MutableBufferSequence, CompletionCondition, ReadHandler>::read_op(AsyncReadStream&, const MutableBufferSequence&, CompletionCondition, ReadHandler&) [with AsyncReadStream = boost::asio::basic_stream_socket<boost::asio::ip::tcp>; MutableBufferSequence = boost::asio::mutable_buffer; CompletionCondition = boost::asio::detail::transfer_all_t; ReadHandler = boost::_bi::bind_t<void, boost::_mfi::mf3<void, network::Connection, const boost::system::error_code&, unsigned int, network::Buffer*>, boost::_bi::list4<boost::_bi::value<network::Connection*>, boost::arg<1> (*)(), boost::arg<2> (*)(), boost::_bi::value<network::Buffer*> > >]'
C:MinGWlibrariesboost-1.52include/boost/asio/impl/read.hpp:497:61: required from 'boost::asio::detail::read_op<AsyncReadStream, MutableBufferSequence, CompletionCondition, ReadHandler> boost::asio::detail::make_read_op(AsyncReadStream&, const MutableBufferSequence&, CompletionCondition, ReadHandler) [with AsyncReadStream = boost::asio::basic_stream_socket<boost::asio::ip::tcp>; MutableBufferSequence = boost::asio::mutable_buffer; CompletionCondition = boost::asio::detail::transfer_all_t; ReadHandler = boost::_bi::bind_t<void, boost::_mfi::mf3<void, network::Connection, const boost::system::error_code&, unsigned int, network::Buffer*>, boost::_bi::list4<boost::_bi::value<network::Connection*>, boost::arg<1> (*)(), boost::arg<2> (*)(), boost::_bi::value<network::Buffer*> > >]'
C:MinGWlibrariesboost-1.52include/boost/asio/impl/read.hpp:526:3: required from 'void boost::asio::async_read(AsyncReadStream&, const MutableBufferSequence&, ReadHandler&&) [with AsyncReadStream = boost::asio::basic_stream_socket<boost::asio::ip::tcp>; MutableBufferSequence = boost::asio::mutable_buffer; ReadHandler = boost::_bi::bind_t<void, boost::_mfi::mf3<void, network::Connection, const boost::system::error_code&, unsigned int, network::Buffer*>, boost::_bi::list4<boost::_bi::value<network::Connection*>, boost::arg<1> (*)(), boost::arg<2> (*)(), boost::_bi::value<network::Buffer*> > >&]'
..srcnetworkConnection.cpp:70:45: required from here
C:MinGWlibrariesboost-1.52include/boost/asio/detail/consuming_buffers.hpp:157:58: error: 'class boost::asio::mutable_buffer' has no member named 'end'
C:MinGWlibrariesboost-1.52include/boost/asio/detail/consuming_buffers.hpp:157:58: error: 'class boost::asio::mutable_buffer' has no member named 'begin'
C:MinGWlibrariesboost-1.52include/boost/asio/detail/consuming_buffers.hpp:157:58: error: using invalid field 'boost::asio::detail::consuming_buffers<Buffer, Buffers>::begin_remainder_'
C:MinGWlibrariesboost-1.52include/boost/asio/detail/consuming_buffers.hpp:157:58: error: 'class boost::asio::mutable_buffer' has no member named 'begin'
C:MinGWlibrariesboost-1.52include/boost/asio/detail/consuming_buffers.hpp:161:7: error: 'class boost::asio::mutable_buffer' has no member named 'begin'
C:MinGWlibrariesboost-1.52include/boost/asio/detail/consuming_buffers.hpp:162:7: error: using invalid field 'boost::asio::detail::consuming_buffers<Buffer, Buffers>::begin_remainder_'
C:MinGWlibrariesboost-1.52include/boost/asio/detail/consuming_buffers.hpp: In instantiation of 'boost::asio::detail::consuming_buffers<Buffer, Buffers>::consuming_buffers(const boost::asio::detail::consuming_buffers<Buffer, Buffers>&) [with Buffer = boost::asio::mutable_buffer; Buffers = boost::asio::mutable_buffer; boost::asio::detail::consuming_buffers<Buffer, Buffers> = boost::asio::detail::consuming_buffers<boost::asio::mutable_buffer, boost::asio::mutable_buffer>]':
C:MinGWlibrariesboost-1.52include/boost/asio/impl/read.hpp:177:67: required from 'boost::asio::detail::read_op<AsyncReadStream, MutableBufferSequence, CompletionCondition, ReadHandler>::read_op(boost::asio::detail::read_op<AsyncReadStream, MutableBufferSequence, CompletionCondition, ReadHandler>&&) [with AsyncReadStream = boost::asio::basic_stream_socket<boost::asio::ip::tcp>; MutableBufferSequence = boost::asio::mutable_buffer; CompletionCondition = boost::asio::detail::transfer_all_t; ReadHandler = boost::_bi::bind_t<void, boost::_mfi::mf3<void, network::Connection, const boost::system::error_code&, unsigned int, network::Buffer*>, boost::_bi::list4<boost::_bi::value<network::Connection*>, boost::arg<1> (*)(), boost::arg<2> (*)(), boost::_bi::value<network::Buffer*> > >; boost::asio::detail::read_op<AsyncReadStream, MutableBufferSequence, CompletionCondition, ReadHandler> = boost::asio::detail::read_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp>, boost::asio::mutable_buffer, boost::asio::detail::transfer_all_t, boost::_bi::bind_t<void, boost::_mfi::mf3<void, network::Connection, const boost::system::error_code&, unsigned int, network::Buffer*>, boost::_bi::list4<boost::_bi::value<network::Connection*>, boost::arg<1> (*)(), boost::arg<2> (*)(), boost::_bi::value<network::Buffer*> > > >]'
C:MinGWlibrariesboost-1.52include/boost/asio/impl/read.hpp:497:61: required from 'boost::asio::detail::read_op<AsyncReadStream, MutableBufferSequence, CompletionCondition, ReadHandler> boost::asio::detail::make_read_op(AsyncReadStream&, const MutableBufferSequence&, CompletionCondition, ReadHandler) [with AsyncReadStream = boost::asio::basic_stream_socket<boost::asio::ip::tcp>; MutableBufferSequence = boost::asio::mutable_buffer; CompletionCondition = boost::asio::detail::transfer_all_t; ReadHandler = boost::_bi::bind_t<void, boost::_mfi::mf3<void, network::Connection, const boost::system::error_code&, unsigned int, network::Buffer*>, boost::_bi::list4<boost::_bi::value<network::Connection*>, boost::arg<1> (*)(), boost::arg<2> (*)(), boost::_bi::value<network::Buffer*> > >]'
C:MinGWlibrariesboost-1.52include/boost/asio/impl/read.hpp:526:3: required from 'void boost::asio::async_read(AsyncReadStream&, const MutableBufferSequence&, ReadHandler&&) [with AsyncReadStream = boost::asio::basic_stream_socket<boost::asio::ip::tcp>; MutableBufferSequence = boost::asio::mutable_buffer; ReadHandler = boost::_bi::bind_t<void, boost::_mfi::mf3<void, network::Connection, const boost::system::error_code&, unsigned int, network::Buffer*>, boost::_bi::list4<boost::_bi::value<network::Connection*>, boost::arg<1> (*)(), boost::arg<2> (*)(), boost::_bi::value<network::Buffer*> > >&]'
..srcnetworkConnection.cpp:70:45: required from here
C:MinGWlibrariesboost-1.52include/boost/asio/detail/consuming_buffers.hpp:172:32: error: using invalid field 'boost::asio::detail::consuming_buffers<Buffer, Buffers>::begin_remainder_'
C:MinGWlibrariesboost-1.52include/boost/asio/detail/consuming_buffers.hpp:172:32: error: 'class boost::asio::mutable_buffer' has no member named 'begin'
C:MinGWlibrariesboost-1.52include/boost/asio/detail/consuming_buffers.hpp:174:38: error: no type named 'const_iterator' in 'class boost::asio::mutable_buffer'
C:MinGWlibrariesboost-1.52include/boost/asio/detail/consuming_buffers.hpp:175:38: error: no type named 'const_iterator' in 'class boost::asio::mutable_buffer'
C:MinGWlibrariesboost-1.52include/boost/asio/detail/consuming_buffers.hpp:176:5: error: using invalid field 'boost::asio::detail::consuming_buffers<Buffer, Buffers>::begin_remainder_'
C:MinGWlibrariesboost-1.52include/boost/asio/detail/consuming_buffers.hpp:174:38: error: no type named 'const_iterator' in 'class boost::asio::mutable_buffer'
C:MinGWlibrariesboost-1.52include/boost/asio/detail/consuming_buffers.hpp:175:38: error: no type named 'const_iterator' in 'class boost::asio::mutable_buffer'
给async_read()
自由函数的buffer参数需要满足MutableBuffer
序列的要求。你应该用mutable_buffers_1
而不是mutable_buffer
。
void Connection::asyncReceiveHeader()
{
Buffer* header = new Buffer(packetHeaderSize);
ba::mutable_buffers_1 buffer = ba::buffer(header->pointer(), header->size());
auto readHandler = bind(&Connection::headerReceived, this, ba::placeholders::error, ba::placeholders::bytes_transferred, header);
ba::async_read(socket, buffer, readHandler);
}
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 提升 ASIO 无法识别计时器对象
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- boost::asio如何生成多个协同程序,然后加入它们
- 缓慢提升ASIO
- 从 Boost ASIO 获取 epoll 描述符 io_service对象
- 如何在 Boost.Asio 中使用 Zero-copy sendmsg/receive
- C++ Boost::asio串行通信与Arduino无法写入
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- 提升 Asio TCP 服务器 处理多个客户端
- boost::asio::buffer 如何遍历字节
- 在 boost::<double>asio::buffer 中使用像 std::vector<std::complex> 这样的参数
- 如何在方法参数中使用boost :: asio :: buffer
- 如何将 std::array 转换为 boost::asio::buffer
- boost::asio::buffer与矢量结构
- asio::buffer类型,用于发送std::vector和std::string
- 如何将Boost::asio::buffer(buf,size)与Boost绑定一起使用
- 动态大小的提升::asio::buffer
- 强制boost::asio::buffer按值复制