我的C ++代码中的#define语句有些问题,但是我不熟悉如何在VC ++中处理它:
>filetaint.cpp
1>.\filetaint.cpp(272) : error C2872: 'UINT32' : ambiguous symbol
1> could be 'C:\Program Files\Microsoft SDKs\Windows\v6.0A\\include\basetsd.h(82) : unsigned int WIND::UINT32'
1> or '..\..\include\gen\types_foundation.TLH(80) : LEVEL_BASE::UINT32'
1>.\filetaint.cpp(275) : error C2872: 'UINT32' : ambiguous symbol
1> could be 'C:\Program Files\Microsoft SDKs\Windows\v6.0A\\include\basetsd.h(82) : unsigned
[...]
==========构建:0成功,1失败,0最新,0跳过==========
所以问题在于,编译器不知道是否使用我的Windows SDK“basetsh.h”或者types_foundation.h中的定义。我希望它使用后者.C ++命名空间中是否有任何构造告诉编译器要选择什么?我想避免修补SDK或库本身。
#include "filetaint.h"
#include "dift.h"
using namespace WIND;
types_foundation.TLH包含正确的语句。它已经在VS 2008中的VC ++路径中了。我在这里有点困惑......但我想我必须找到一种方法告诉我的编译器暂时忽略SDK;)。
答案 0 :(得分:5)
我希望它使用后者。
然后使用命名空间名称限定您的使用情况:LEVEL_BASE::UINT32
。
或者,从代码中删除using指令,并限定从库中使用的所有名称。在大多数情况下避免使用指令是个好主意:它们比它们的价值要麻烦得多。
答案 1 :(得分:1)
是
使用其命名空间编写完全限定名称,而不是依靠编译器为您神奇地选择正确的名称:
LEVEL_BASE::UINT32
我在这里错过了什么吗?
答案 2 :(得分:0)
使用命名空间名称明确限定它,无论您在何处使用它。