[问题] 一个专案使用两种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