如何制作VS 2008独有的“暧昧符号”

时间:2011-06-07 16:20:34

标签: c++ namespaces

我的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;)。

3 个答案:

答案 0 :(得分:5)

  

我希望它使用后者。

然后使用命名空间名称限定您的使用情况:LEVEL_BASE::UINT32

或者,从代码中删除using指令,并限定从库中使用的所有名称。在大多数情况下避免使用指令是个好主意:它们比它们的价值要麻烦得多。

答案 1 :(得分:1)

使用其命名空间编写完全限定名称,而不是依靠编译器为您神奇地选择正确的名称:

LEVEL_BASE::UINT32

我在这里错过了什么吗?

答案 2 :(得分:0)

使用命名空间名称明确限定它,无论您在何处使用它。