2013-01-24 83 views
0

這個問題很大程度上與我的previoustwo問題有關。包括socket.io-client-cpp和提升到Windows 8 C++應用程序

我已經構建並在我的項目中包含了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':不是 '`全局命名空間'」(SocketIO.cpp)C的成員:\程序文件(86)\微軟的Visual Studio 11.0 \ VC \ include \ cstdint

錯誤2錯誤C2873:'int_least8_ t':符號不能用於使用聲明(SocketIO.cpp)c:\ program files(x86)\ microsoft visual studio 11.0 \ vc \ include \ cstdint

錯誤3錯誤C2039:'int_least16_t':is不是「全局命名空間」(SocketIO.cpp)的成員c:\ program files(x86)\ microsoft visual studio 11.0 \ vc \ include \ cstdint

錯誤4錯誤C2873:'int_least16_t':symbol can not be在使用聲明(SocketIO.cpp)中使用c:\​​ program files(x86)\ microsoft visual studio 11.0 \ vc \ include \ cstdint

有超過100個以上錯誤。

我正在使用Microsoft Visual Studio 2012 Express C++,並且一直未能想出或找到解決方案。

回答

0

我最終創建了自己的socket.io客戶端實現。這是一個與工作有關的項目,所以我需要獲得公開發布的權限。

0

您正在C庫頭文件中混合使用C++庫頭文件(這是不好的風格),特別是您在<stdint.h>之前包含<cstdint>。 IIRC,Visual C++的<cstdint>只包含<stdint.h>命名空間標準。這意味着,你#include<stdint.h>不會做任何事情(因爲包括守衛)。此外,int_least8_t等將只在名稱空間標準中駐留而不是,而不在全局名稱空間中。

我不太確定在VS 2012中這是否正確,但您可以通過深入探索<cstdint>來檢查。

在任何情況下,請參考命名空間std中的那些類型,因爲這是它們應該在其中的標準兼容命名空間。如果您經常使用它們(如它似乎),請使用指令將它們導入到任何命名空間中正在工作:

#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; 
+0

這並沒有解決問題。我添加了兩個作爲測試,因爲增加一個或其他原本並沒有解決這個問題,並暫時離開。 – OzBarry

+0

你是不是深究''(也許包括頭部)以查看'int_least8_t'是否甚至定義在那裏?如果是這樣,我們將需要更多的代碼 - 包含在'.cpp'中的重要代碼可能會重現此問題。 –

+0

它確實在cstdint中定義。我認爲主要的問題是boost和C++ cx在一起玩不好。 – OzBarry

相關問題