3

XCode を使用して、非常に大きな C/C++ プロジェクトを Mac に移植しています。一部の C++ クラスはstringorをインポートしvectorます。これにより、いくつかの std 関数の再定義を報告するいくつかの奇妙なエラーが発生します。たとえば、コンパイラredefinition of 'std::__is_integral'<type_traits>.

他のエラーは発生せず、これらの標準関数を上書きすることは絶対にありません。また、のインクルードをコメントすると、エラーは消えますstring

この動作の原因は何ですか?

4

1 に答える 1

2

このプロジェクトのために継承した C++ コードのどこかにbool. boolとして再定義されましintた。したがって、type_traitsヘッダー (およびその他の std-lib ヘッダー) には、aboolintジェネリック パラメーターを含むジェネリック メソッドのメソッド定義が重複していました。

たとえば、type_traits には次のようなものがあります。

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

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

intとしてbool再定義されたように、両方のメソッドが同じ署名を持っていたため、このredefinition of...エラーが発生しました。

于 2012-08-23T11:21:44.383 に答える