[問題] 一個專案使用兩種namespace

作者: t78923t (トースト)   2015-06-06 01:18:32
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++ 2008
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
專案資料夾有訊號擷取卡專用的class檔案
問題(Question):
我將程式分成兩個部分 主程式是建立Socket通訊
主程式用的namespace是std
副程式是訊號擷取用的程式 我將此副程式放在.h檔裡
由主程式去include放在.h檔裡的副程式來呼叫
為了使用訊號擷取卡的指令 所以必須使用該擷取卡提供的namespace
然後副程式我有新增一些東西 所以還有使用到std這個namespace
所以副程式共使用了兩種namespace
主程式及副程式若單獨分開編譯不會有任何error 也都可以使用
但不管是用我這種呼叫方式 或是將主 副程式放在同一個cpp檔裡編譯
主程式建立Socket的其中一行會出現error
不知該如何解決
程式預期功能:
此程式預期功能是當通訊成功建立時 呼叫副程式開始擷取訊號
錯誤結果(Wrong Output):
初始化Socket通訊的部分
int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
這一行出現 error c2872 'uint8': ambiguous symbol 的error
程式碼(Code):(請善用置底文網頁, 記得排版)
我的主副程式大致上的寫法如下:
//以下是主程式,放在cpp檔裡
.....
#include <winsock.h>
#include "InstantAI.h"
using namespace std;
#pragma comment(lib,"ws2_32.lib") //Winsock Library
int main()
{
......
if(socket_used == true)
{
// Initialize Winsock.
WSADATA wsaData;
SOCKET AcceptSocket;
int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
......
Datareadfunction()
......
}
}
//以下是副程式,放在InstantAI.h檔裡
.....
using namespace Automation::BDaq;
using namespace std;
void Datareadfunction()
{
....
}
經反覆測試發現似乎是使用了兩種namespace造成衝突
請問這問題該如何解決?
謝謝
作者: kao50126 (無從)   2015-06-06 01:19:00
可能有func名稱在兩個namespace都有?剛剛有想到會不會是有header中重複定義typedef uint8?這部分可能要用"uint8"當key word找看看
作者: TobyH4cker (Toby (我要當好人))   2015-06-06 08:50:00
大概是winsock.h 跟訊號擷取卡了
作者: kwpn (ITSST)   2015-06-06 22:04:00
如果不include"InstantAI.h", 也不呼叫該函式, 也會衝突嗎?
作者: Killercat (殺人貓™)   2015-06-07 13:12:00
gcc -E.....有時候不見得是namespace,而是萬惡的#define造成的另外他的意思是說該行用uint8 可以匹配到一個以上的function 所以他搞不清楚該用哪一個的意思很有可能是名字一樣簽名不同的兩個function比方說一個void a(double) 一個void a(float)你輸入個a(1)編譯器就會跳這種錯誤因為他不知道要幫你用哪個好
作者: LPH66 (-6.2598534e+18f)   2015-06-08 01:29:00
C2872 如原 PO 所發現的是 namespace 間的名字衝突如果是 #define 間的衝突的話應該不會出現 C2872uint8 這名字看起來像是型別, 所以我猜可能有某個 macro展開之後包含了用 #define 定義的型別名 uint8 造成衝突原 PO 能方便放上 InstantAI.h 的內容嗎?不能的話能否放上這檔案裡面有 uint8 這字的附近行數?啊, 看到一個很大的問題了...我回文解釋

Links booklink

Contact Us: admin [ a t ] ucptt.com