解决ambiguous symbol命名空间中类名变量名冲突的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决ambiguous symbol命名空间中类名变量名冲突的问题相关的知识,希望对你有一定的参考价值。
最近在将一个复杂的工程集成到现有的项目中。编译时发现,有的变量名冲突了,提示就是xxxx ambiguous symbol,并且在编译输出时,指明了两个文件当中特定的变量名或者类名相同。出现这个编译错误的原因是,在工程中加载了两个头文件,这两个头文件中包含相同的类名或者变量名,解决及避免出现此类错误的方法如下:
- 代码库尽量包含在一个命名空间中。在我们写一个大的程序时,一些变量可能会与其他工程造成重名,所以加命名空间是很有必要的;另外,在自己的代码库中命名的类名变量名尽量以代码库的名称开头,这样大大降低和其他代码库命名冲突的可能性;
- 禁止在头文件中使用using namespace xxx。这很关键,头文件中使用命名空间,那么加载该头文件的文件,都加载了命名空间,造成头文件污染,正确的方法是,加头文件,但是在特定的类名前使用域标识符,如std::string;
- 还有一种偷懒的方法,直接在冲突的地方指定其域标识符,但是假设冲突的地方很多,那么这种方法就很麻烦了,推荐使用1和2,从根上解决问题。
以上是关于解决ambiguous symbol命名空间中类名变量名冲突的问题的主要内容,如果未能解决你的问题,请参考以下文章
关于error C2872: 'LONG_PTR' : ambiguous symbol