Я пытаюсь разработать сервер websocket ++ на моем ноутбуке с Windows 7 для удобства (не очень хорошо с vi
пока не хочу постоянно фтп). Я перейду на Ubuntu 12.10 в конце.
Я использую проект консольного приложения Visual C ++ Win32.
Я include
д websocketpp
каталог, установлен буст 1.53.0 Как установить Boost.Build в Windows?, а также include
d & link
Эд Буст Усиление ссылок, Visual Studio & контроль версий.
Я пытаюсь build
print_server.cpp
http://www.zaphoyd.com/websocketpp/manual/building-program-websocket
Когда я делаю, я получаю Error 1 error C2182: '*' : illegal use of type 'void' c:\boost_1_53_0\boost\smart_ptr\intrusive_ptr.hpp Line:155 Column:1
Код повышения (вторая строка 155):
T & operator*() const
{
BOOST_ASSERT( px != 0 );
return *px;
}
Почему я получаю эту ошибку? Как мне это исправить?
Это известная проблема при компиляции с использованием boost на VCPP. WebSocket ++ 0.3 не использует intrusive_ptr, но использует static_pointer_cast. Каждый интеллектуальный указатель boost реализует собственную перегрузку boost :: static_pointer_cast. VCPP не может выбрать правильную перегрузку при статическом приведении shared_ptr<void>
к shared_ptr<connection_ptr>
, Clang и GCC используют правильную перегрузку, VCPP — нет. У меня есть небольшая демонстрационная программа, которая демонстрирует эту проблему, которую я собирался очистить и спросить Stack Overflow о …
Между тем, простое исправление заключается в том, чтобы сказать WebSocket ++ использовать C ++ 11 вместо усиления интеллектуальных указателей. VCPP правильно работает с std :: static_pointer_cast / std :: shared_ptr. в http://www.zaphoyd.com/websocketpp/manual/reference/cpp11-support определяющий _WEBSOCKETPP_CPP11_MEMORY_
прежде чем включать заголовки WebSocket ++, сделаем это. Я протестировал реализацию C ++ 11 на VCPP2010 <memory>
и он реализует все, что нужно WebSocket ++.
Других решений пока нет …