在c++中消除名字冲突的最佳方式

visual Best way to remove collision of names in c++

本文关键字:冲突 最佳 方式 c++      更新时间:2023-10-16

我刚刚从WinXP升级到7,我必须将Windows SDK添加到我的项目中以使其编译。

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

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

我想到了:

  • 重命名,但我将打破命名惯例(这真的是玩家的状态)
  • 把它放在一个命名空间中,然后我应该把每个类放在一个命名空间中,这意味着很多工作

是否有其他方法(可能是特殊的MSVC 2010方式)排除该文件或某种"不定义"该enum或其他东西?

[edit]答案是,响亮而清晰,NAMESPACES!+1,谢谢大家!

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

把它放在命名空间中,然后我应该把每个类放在命名空间,这意味着很多工作

嗯,基本上是艰难的。类无论如何都应该在命名空间中。如果你不把它们放在一个命名空间中,那么这是不可持续的,这只是偷工减料,这就是为什么。

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

我会把它放在一个命名空间中。

不,这并不意味着你需要把所有的类放在一个命名空间中。只是说

using myns::PlayerState; 

在适当的时候,或者如果那时冲突仍然会发生,

typedef myns::PlayerState myPlayerState;

<子>如果你真的想要快速和肮脏,做一个

#define PlayerState MyPlayerState
后的

包括<windows.h>