错误 C2182:'*':非法使用 'void' 类型 C:\boost_1_53_0\boost\smart_ptr\intrusive_ptr.hpp

error C2182: '*' : illegal use of type 'void' c:oost_1_53_0oostsmart_ptrintrusive_ptr.hpp

本文关键字:ptr boost intrusive hpp smart 类型 非法 C2182 错误 void      更新时间:2023-10-16

我正试图在我的windows 7笔记本电脑上开发一个websocket++服务器(vi还不好,不想经常ftp)。我最后会转到Ubuntu 12.10。

我正在使用Visual c++ Win32控制台应用程序项目。

我已经include d websocketpp目录,安装了boost 1.53.0如何安装boost。基于Windows构建?, include d &link ed boost boost链接,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_0boostsmart_ptrintrusive_ptr.hpp Line:155 Column:1

boost代码为(第二行155):

T & operator*() const
{
    BOOST_ASSERT( px != 0 );
    return *px;
}

为什么我得到这个错误?我怎么修理它?

在VCPP上使用boost编译时,这是一个已知的问题。WebSocket++ 0.3不使用intrusive_ptr,但它使用了static_pointer_cast。每个boost智能指针都实现了自己的boost::static_pointer_cast重载。当将shared_ptr<void>静态转换为shared_ptr<connection_ptr>时,VCPP似乎无法选择正确的过载。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,在包含WebSocket++头文件之前定义_WEBSOCKETPP_CPP11_MEMORY_将实现这一点。我已经测试了VCPP2010的c++ 11 <memory>的实现,它实现了WebSocket++需要的一切。