ошибка C2182: ‘*’: недопустимое использование типа ‘void’ c: \ boost_1_53_0 \ boost \ smart_ptr \ intrusive_ptr.hpp

Я пытаюсь разработать сервер websocket ++ на моем ноутбуке с Windows 7 для удобства (не очень хорошо с vi пока не хочу постоянно фтп). Я перейду на Ubuntu 12.10 в конце.

Я использую проект консольного приложения Visual C ++ Win32.

Я includeд websocketpp каталог, установлен буст 1.53.0 Как установить Boost.Build в Windows?, а также included & 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;
}

Почему я получаю эту ошибку? Как мне это исправить?

1

Решение

Это известная проблема при компиляции с использованием 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 ++.

3

Другие решения

Других решений пока нет …