Ошибка 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 каталог, установлен Boost 1.53.0 Как установить Boost.Build на Windows?, а также includeд & linked boost Boost linking, Visual Studio и контроль версий.

Я пытаюсь buildprint_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 ++.

Другие вопросы по тегам