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

wis*_*shi 0 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 
[...]
Run Code Online (Sandbox Code Playgroud)

==========构建:0成功,1失败,0最新,0跳过==========

所以问题在于,编译器不知道是否使用我的Windows SDK"basetsh.h"或者types_foundation.h中的定义.我希望它使用后者.在C++命名空间中是否有任何构造来告诉编译器选择什么?我想避免修补SDK或库本身.

#include "filetaint.h"
#include "dift.h"

using namespace WIND;
Run Code Online (Sandbox Code Playgroud)

types_foundation.TLH包含正确的语句.它已经在VS 2008中的VC++路径中了.我在这里有点困惑......但我想我必须找到一种方法告诉我的编译器暂时忽略SDK;).

Jam*_*lis 5

我希望它使用后者.

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

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