0

这个问题与我之前的 两个问题密切相关。

我已经构建并将 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' : is not a member of '`global namespace'' (SocketIO.cpp) c:\program files (x86)\microsoft visual studio 11.0\vc\include\cstdint

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

错误 3 错误 C2039: 'int_least16_t' : is not a member of '`global namespace'' (SocketIO.cpp) c:\program files (x86)\microsoft visual studio 11.0\vc\include\cstdint

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

以上错误有100多个。

我正在使用 Microsoft Visual Studio 2012 Express C++,但无法提出或找到解决方案。

4

2 回答 2

0

您将 C 库头文件与 C++ 库头文件混合在一起(这种风格很糟糕),尤其是您<cstdint>之前是否包含<stdint.h>. IIRC,<cstdint>Visual C++ 仅包含<stdint.h>命名空间 std。这意味着,你不会做任何事情(因为包含警卫)#include<stdint.h>此外,int_least8_t等将驻留在命名空间 std 中,而不驻留在全局命名空间中。

我不太确定这在 VS 2012 中是否正确,但您可以通过深入研究<cstdint>.

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

#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;
于 2013-01-24T15:01:51.403 回答
0

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

于 2013-02-13T19:52:27.520 回答