解决ambiguous symbol命名空间中类名变量名冲突的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决ambiguous symbol命名空间中类名变量名冲突的问题相关的知识,希望对你有一定的参考价值。

  最近在将一个复杂的工程集成到现有的项目中。编译时发现,有的变量名冲突了,提示就是xxxx ambiguous symbol,并且在编译输出时,指明了两个文件当中特定的变量名或者类名相同。出现这个编译错误的原因是,在工程中加载了两个头文件,这两个头文件中包含相同的类名或者变量名,解决及避免出现此类错误的方法如下:

  1. 代码库尽量包含在一个命名空间中。在我们写一个大的程序时,一些变量可能会与其他工程造成重名,所以加命名空间是很有必要的;另外,在自己的代码库中命名的类名变量名尽量以代码库的名称开头,这样大大降低和其他代码库命名冲突的可能性;
  2. 禁止在头文件中使用using namespace xxx。这很关键,头文件中使用命名空间,那么加载该头文件的文件,都加载了命名空间,造成头文件污染,正确的方法是,加头文件,但是在特定的类名前使用域标识符,如std::string;
  3. 还有一种偷懒的方法,直接在冲突的地方指定其域标识符,但是假设冲突的地方很多,那么这种方法就很麻烦了,推荐使用1和2,从根上解决问题。

  

以上是关于解决ambiguous symbol命名空间中类名变量名冲突的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何解决两个不使用命名空间的第三方库之间的类名冲突?

关于error C2872: 'LONG_PTR' : ambiguous symbol

“xtime: ambiguous symbol”错误,包括 <boost/asio.hpp> [关闭]

C++ 唯一类名与命名空间

PHP命名空间

命名空间和类名冲突