我已经在我的项目中构建并包含了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 ++,但却未能提出或找到解决方案。
答案 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客户端实现。这是一个与工作相关的项目,因此我需要获得公开发布的许可。