包含<string>会导致std-lib函数的“重定义”错误</string>

时间:2012-08-23 11:21:44

标签: c++ xcode

我正在使用XCode将一个非常大的C / C ++项目移植到Mac。某些C ++类导入stringvector。这导致一些奇怪的错误报告重新定义了几个std函数。例如,编译器在redefinition of 'std::__is_integral'中报告<type_traits>

我没有得到任何其他错误,我绝对不会覆盖任何这些std函数。当我评论string的包含时,错误也会消失。

可能导致此行为的原因是什么?

1 个答案:

答案 0 :(得分:2)

事实证明,在C ++代码中的某个地方 - 我为这个项目继承了 - 重新定义了boolbool被重新定义为int。因此,在type_traits标头(以及一些其他std-lib标头)中,存在通用方法的重复方法定义,这些方法定义了boolint通用参数。

例如,在type_traits中有:

template <> struct __is_integral<bool> : public true_type {};

template <> struct __is_integral<int> : public true_type {};

bool被重新定义为int时,两个方法都有相同的签名,我得到了redefinition of...错误。

相关问题