当两个Linux第三方库在其枚举中使用相同的名称时,在C++中可以做什么

use*_*514 2 c++ linux compiler-errors

我正在使用Linux并使用第三方C和一堆第三方C++代码,而我正在编写我的C++代码而无法编译,因为编译器会抱怨两次:

错误:相互矛盾的decalarations XXXX(我的变量名称)错误:XXXX有一个先前的decalratoin

XXXX是第三方库的两个库中的两个不同枚举集中的枚举成员.

有不止一个案例有类似的问题.

Chr*_*ung 6

您应该在单独的命名空间中包含C库头.

namespace foo {
    #include <foo.h>
}
Run Code Online (Sandbox Code Playgroud)

这样,因为外部C代码不使用命名空间,程序仍然会正确链接,但名称将(在C++级别)不再与您的其他C++库冲突.

  • `#define`s不受名称空间的影响.如果您可以将"常量"#define更改为常量变量并且所有内容仍然编译,那么这可能是朝着正确方向迈出的一步. (6认同)