2013-03-29 1 views
1

내 Windows 7 노트북에서 websocket ++ 서버를 손쉽게 개발하려고합니다. (vi은 좋지 않습니다. 아직, 끊임없이 ftp하고 싶지는 않음). 끝에 우분투 12.10으로 이동합니다.오류 C2182 : '*': 'void'형식을 잘못 사용했습니다. C : boost_1_53_0 boost smart_ptr intrusive_ptr.hpp

Visual C++ Win32 콘솔 응용 프로그램 프로젝트를 사용하고 있습니다.

나는했습니다 include D를 websocketpp 디렉토리에 설치 부스트 1.53.0 How do you install Boost.Build on Windows?include D & link 에드 부스트 Boost linking, Visual Studio & version control.

나는 buildprint_server.cpphttp://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 헤더에서 _not_입니다. Boost를 사용하는 방법입니다. 어딘가에 'void'타입을 가진 Boost 스마트 포인터에서 역 참조 연산자를 사용합니다. –

답변

3

이것은 VCPP에서 부스트를 사용하여 컴파일 할 때 알려진 문제입니다. WebSocket ++ 0.3은 intrusive_ptr을 사용하지 않지만 static_pointer_cast를 사용합니다. 각 부스트 스마트 포인터는 boost :: static_pointer_cast의 자체 오버로드를 구현합니다. VCPP는 shared_ptr<void>을 정적 캐스팅 할 때 shared_ptr<connection_ptr>에 올 Y 른 과부하를 선택할 수 없습니다. Clang과 GCC 모두 올바른 오버로드를 사용하지만 VCPP는 그렇지 않습니다. 나는이 문제를 설명하는 작은 데모 프로그램을 가지고 있는데, 나는 정리를하고 Stack Overflow에 대해 묻는다. ...

간단한 수정으로 WebSocket ++에 부스트가 아닌 C++ 11을 사용하도록 지시하는 것이다. 스마트 포인터. VCPP는 std :: static_pointer_cast/std :: shared_ptr에서 올바르게 작동합니다. WebSocket ++ 헤더를 포함하기 전에 http://www.zaphoyd.com/websocketpp/manual/reference/cpp11-support으로 _WEBSOCKETPP_CPP11_MEMORY_을 정의하면이 작업이 수행됩니다. VCPP2010의 C++ 구현을 테스트했습니다. 11 <memory>이며 WebSocket ++에 필요한 모든 것을 구현합니다.

관련 문제