1

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

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

我已经找到includewebsocketpp目录,安装了 boost 1.53.0你如何在 Windows 上安装 Boost.Build?,并开发了includeboost linkBoost链接、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;
}

为什么我会收到此错误?我如何解决它?

4

1 回答 1

3

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

于 2013-03-29T02:12:15.940 回答