我正在使用XCode将一个非常大的C / C ++项目移植到Mac。某些C ++类导入string
或vector
。这导致一些奇怪的错误报告重新定义了几个std函数。例如,编译器在redefinition of 'std::__is_integral'
中报告<type_traits>
。
我没有得到任何其他错误,我绝对不会覆盖任何这些std函数。当我评论string
的包含时,错误也会消失。
可能导致此行为的原因是什么?
答案 0 :(得分:2)
事实证明,在C ++代码中的某个地方 - 我为这个项目继承了 - 重新定义了bool
。 bool
被重新定义为int
。因此,在type_traits
标头(以及一些其他std-lib标头)中,存在通用方法的重复方法定义,这些方法定义了bool
和int
通用参数。
例如,在type_traits中有:
template <> struct __is_integral<bool> : public true_type {};
和
template <> struct __is_integral<int> : public true_type {};
当bool
被重新定义为int时,两个方法都有相同的签名,我得到了redefinition of...
错误。