visual studio告訴我「錯誤C2664:'boost :: asio :: mutable_buffer :: mutable_buffer(const boost :: asio :: mutable_buffer &)':不可能將參數1從'char'轉換爲'const boost :: asio :: mutable_buffer &'位於consume_buffers.hpp的第163行「boost :: asio buffer無法將參數從char轉換爲const mutable_buffer&
我不確定爲什麼發生這種情況,也不知道如何解決它(否則我不會問這^^'),但我認爲它可能與這些功能有關..甚至強硬我試過他們在另一個項目,一切工作正常...但我幾乎找不到有什麼不同
so ... here comes代碼th在可能是相關的,如果有什麼有用的東西似乎失蹤,我會很樂意發送它。
數據包是這個類的所有實例。
class CPacketBase
{
protected:
const unsigned short _packet_type;
const size_t _size;
char* _data;
public:
CPacketBase(unsigned short packet_type, size_t size);
~CPacketBase();
size_t get_size();
const unsigned short& get_type();
virtual char* get();
virtual void set(char*);
};
這發出了一個給定的包
template <typename Handler>
void async_write(CPacketBase* packet, Handler handler)
{
std::string outbuf;
outbuf.resize(packet->get_size());
outbuf = packet->get();
boost::asio::async_write(_socket
, boost::asio::buffer(outbuf, packet->get_size())
, handler);
}
這使閱讀包,並調用該數據包的報頭(無符號短)解碼功能,調整緩衝區將它發送到另一個函數讀取真實從分組
template <typename Handler>
void async_read(CPacketBase* packet, Handler handler)
{
void (CTCPConnection::*f)(const boost::system::error_code&
, CPacketBase*, boost::tuple<Handler>)
= &CTCPConnection::handle_read_header<Handler>;
boost::asio::async_read(_socket, _buffer_data
, boost::bind(f
, this
, boost::asio::placeholders::error
, packet
, boost::make_tuple(handler)));
}
數據,這是由async_read一旦接收到分組稱爲
template <typename Handler>
void handle_read_header(const boost::system::error_code& error, CPacketBase* packet, boost::tuple<Handler> handler)
{
if (error)
{
boost::get<0>(handler)(error);
}
else
{
// Figures packet type
unsigned short packet_type = *((unsigned short*) _buffer_data.c_str());
// create new packet according to type
delete packet;
...
// read packet's data
_buffer_data.resize(packet->get_size()-2); // minus header size
void (CTCPConnection::*f)(const boost::system::error_code&
, CPacketBase*, boost::tuple<Handler>)
= &CTCPConnection::handle_read_data<Handler>;
boost::asio::async_read(_socket, _buffer_data
, boost::bind(f
, this
, boost::asio::placeholders::error
, packet
, handler));
}
}
評論boost :: asio :: async_read調用使我能夠構建項目一次,然後即使我取消註釋它我仍然可以構建解決方案,但重建給了我不同的錯誤: 「'const iterator':不是'boost :: asio :: mutable_buffer'的成員'' ''語法錯誤:在'const_iterator'之前缺少',' – 2010-06-10 08:22:07
您調用中的_buffer_data類型是什麼'提高:: ASIO :: async_read'? – bjlaub 2010-06-10 11:53:44
我試過std :: string,std :: vector和boost :: array ,但是它們並不一定把它們的所有數據放在同一個內存區域,這就是問題的根源,顯然 –
2010-06-11 03:34:08