C++ 消除c+中名称冲突的最佳方法+;

C++ 消除c+中名称冲突的最佳方法+;,c++,visual-c++,windows-7,winapi,C++,Visual C++,Windows 7,Winapi,我刚从WinXP升级到7,我不得不将Windows SDK添加到我的项目中,使其能够编译 到目前为止还不错,但我的第二个项目遇到了一个障碍,“PlayerState”在我的项目中用作类,在Windows SDK(effects.h)中用作枚举,这显然产生了一个错误(错误C2011:“PlayerState”:“struct”类型重新定义) 解决这个问题的最佳方法是什么 我想到: 重命名,但我将打破命名约定(实际上是玩家的“状态”) 把它放在一个名称空间中,但是我应该把每个类放在一个名称空间中,

我刚从WinXP升级到7,我不得不将Windows SDK添加到我的项目中,使其能够编译

到目前为止还不错,但我的第二个项目遇到了一个障碍,“PlayerState”在我的项目中用作类,在Windows SDK(effects.h)中用作枚举,这显然产生了一个错误(错误C2011:“PlayerState”:“struct”类型重新定义)

解决这个问题的最佳方法是什么

我想到:

  • 重命名,但我将打破命名约定(实际上是玩家的“状态”)
  • 把它放在一个名称空间中,但是我应该把每个类放在一个名称空间中,这意味着要做很多工作
是否有其他方法(可能是特殊的MSVC 2010 vay)可以排除该文件或某种“取消定义”该枚举或其他内容


[编辑]答案是,响亮而清晰的名称空间+谢谢大家

名称空间,这就是它的目的所在。分组并避免名称冲突。如果您遍历代码库并将所有内容都放在名称空间中,这不会有什么坏处。这是您应该一直在做的事情。

显而易见的答案是:为所有项目使用自定义名称空间。它应该有一个唯一的名称,如果您喜欢更深入的名称空间

将它放在命名空间中,然后我应该将每个类放在 名称空间,这意味着大量的工作


嗯,基本上很难。类无论如何都应该在名称空间中。如果没有将它们放在名称空间中,那么这是不可持续的,这只是抄近路,这就是为什么。

我会将其放在名称空间中

不,这并不意味着您需要将所有类放在一个名称空间中。就说

using myns::PlayerState; 
在适当的时候,或者如果冲突在当时仍然会发生

typedef myns::PlayerState myPlayerState;
如果你真的想走得又快又脏,做一个

#define PlayerState MyPlayerState
包括

创建名称空间不是为了防止此类问题吗?尽管这需要做更多的工作,我还是建议这样做,因为这似乎是正确的前进方向。