2010-05-06 4 views
0

Добрый день.Проблемы с чтением в буфер с использованием boost :: asio :: async_read

У меня есть файл Types.hpp в моем проекте. И в этом у меня есть:

....  
namespace RC 
{ 
..... 
..... 

struct ViewSettings 
{ 
    .... 
}; 

..... 
} 

В файле server.cpp я в том числе этого Types.hpp файла, и я тут:

class Session 
{ 
..... 

RC::ViewSettings tmp; 
boost::asio::async_read(socket_, boost::asio::buffer(&tmp, sizeof(RC::ViewSettings)), 
         boost::bind(&Session::Finish_Reading_Data, shared_from_this(), boost::asio::placeholders::error)); 

..... 
} 

А во время компиляции у меня есть ошибки:

error C2825: 'F': must be a class or namespace when followed by '::' 
: see reference to class template instantiation 'boost::_bi::result_traits<R,F>' 

being compiled with 
[ 
    R=boost::_bi::unspecified, 
    F=void (__thiscall Session::*)(void) 
] 

: see reference to class template instantiation 'boost::_bi::bind_t<R,F,L>' 
being compiled with 
[ 
    R=boost::_bi::unspecified, 
    F=void (__thiscall Session::*)(void), 
    L=boost::_bi::list2<boost::_bi::value<boost::shared_ptr<Session>>,boost::arg<1>> 
] 

error C2039: 'result_type' : is not a member of '`global namespace'' 

А код, как это работает надлежащим образом:

int w; 
    boost::asio::async_read(socket_, boost::asio::buffer(&w, sizeof(int)), 
         boost::bind(&Session::Handle_Read_Width, shared_from_this(), boost::asio::placeholders::error)); 

Пожалуйста, помогите. В чем проблема? Спасибо заранее.

ответ

0

Вы пытаетесь передать структуру, а не просто тип. Вот почему он работает с int и не будет работать со структурой.

Я думаю, что это в области сериализации, поэтому я думаю, вам понадобится boost.serialization.

http://www.boost.org/doc/libs/1_43_0/doc/html/boost_asio/examples.html Проверьте этот пример сериализации, возможно, это поможет вам.

0

Вам необходимо наследовать Сессию от boost::enable_shared_from_this<Session>.

Смежные вопросы