【问题标题】:error C2182: '*' : illegal use of type 'void' c:\boost_1_53_0\boost\smart_ptr\intrusive_ptr.hpp错误 C2182: '*' : 非法使用类型 'void' c:\boost_1_53_0\boost\smart_ptr\intrusive_ptr.hpp
【发布时间】:2013-03-29 01:28:16
【问题描述】:

我正在尝试在我的 Windows 7 笔记本电脑上开发一个 websocket++ 服务器以方便使用(对vi 不好,不想经常 ftp)。最后我会迁移到 Ubuntu 12.10。

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

我已经included websocketpp 目录,安装了 boost 1.53.0 How do you install Boost.Build on Windows?included & linked boost Boost linking, Visual Studio & version control

我正在尝试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

boost代码是(第二行是155):

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

为什么会出现此错误?我该如何解决?

【问题讨论】:

  • 实际的错误是not在Boost标头中,这是你使用Boost的方式。在某个地方,您可以在类型为 void 的 Boost 智能指针上使用取消引用运算符。

标签: c++ visual-studio-2010 boost build-error websocket++


【解决方案1】:

这是在 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++ 所需的一切。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    相关资源
    最近更新 更多