包括socket.io-client-cpp和boost到Windows 8 C ++应用程序

时间:2013-01-24 14:44:07

标签: c++ boost windows-8 c++-cx

这个问题与我的previous two问题密切相关。

我已经在我的项目中构建并包含了boost 1.51。

在我的Socket.IO界面文件(以及pch.h)中,这是我的包含的顺序:

#include <wrl.h>
#include <dwrite_1.h>
#include <wincodec.h>
#include <agile.h>
#include "types.h"
#include <cstdint>
#include <stdint.h>
#include <climits>
#include <cstdlib>
#include "boost/cstdint.hpp"
#include "boost/asio.hpp"
#include "boost/bind.hpp"
#include <sio_client_handler.hpp>
#include "boost/thread.hpp"

当我编译代码时,我得到以下输出(仅前几行):

  

错误1错误C2039:'int_least8_t':不是'`global namespace''的成员(SocketIO.cpp)c:\ program files(x86)\ microsoft visual studio 11.0 \ vc \ include \ cstdint

     

错误2错误C2873:'int_least8_t':符号不能用于using声明(SocketIO.cpp)c:\ program files(x86)\ microsoft visual studio 11.0 \ vc \ include \ cstdint

     

错误3错误C2039:'int_least16_t':不是'`global namespace''(SocketIO.cpp)的成员c:\ program files(x86)\ microsoft visual studio 11.0 \ vc \ include \ cstdint

     

错误4错误C2873:'int_least16_t':符号不能用于using声明(SocketIO.cpp)c:\ program files(x86)\ microsoft visual studio 11.0 \ vc \ include \ cstdint

上述错误有100多个。

我使用的是Microsoft Visual Studio 2012 Express C ++,但却未能提出或找到解决方案。

2 个答案:

答案 0 :(得分:0)

您正在将C库标题与C ++库标题混合(风格很差),尤其是您在<cstdint>之前包含<stdint.h>。 IIRC,Visual C ++的<cstdint>只在命名空间std中包含<stdint.h>。这意味着,#include <stdint.h> int_least8_t不会做任何事情(因为包含警卫)。此外,<cstdint>等只会在namespacte std中驻留 ,而不会在全局命名空间中。

我不确定VS 2012中是否正确,但你可以通过潜入#include <cstdint> //#include <stdint.h> <-- leave that one out, it's not C++ standard! std::int_least8_t myIL8 = 5; using std::int_least8_t; int_least8_t anotherIL8 = 42; 来检查。

在任何情况下,请参考命名空间std中的那些类型,因为它是它们应该在的标准兼容命名空间。如果您经常使用它们(看起来如此),请使用using指令将它们导入到您所使用的任何命名空间中工作:

{{1}}

答案 1 :(得分:0)

我最终创建了自己的socket.io客户端实现。这是一个与工作相关的项目,因此我需要获得公开发布的许可。