複数定義エラー: 競合する定義の解決策
C では、ヘッダーで関数またはクラスを定義し、ソース ファイルに実装するときに、開発者は「複数の定義」というエラーが発生する可能性があります。このエラーは、複数の翻訳単位 (ソース ファイル) に同じ識別子の定義が含まれている場合に発生します。
複数の定義の原因
ヘッダー ファイルの場合、「複数の定義」エラーが発生します定義を含むものは複数の翻訳単位に含まれます。これは、次の場合に発生する可能性があります。
エラーを理解する
コードサンプルを検討する提供:
// complex.h class Complex { public: friend std::ostream& operator<<(std::ostream&, const Complex&); }; // complex.cpp std::ostream& operator<<(std::ostream&, const Complex&);
この例では、演算子 << の定義は次のようになります。は、complex.cpp ではなく complex.h にあります。 main.cpp と complex.cpp の両方が << を定義しようとするため、これにより複数定義エラーが発生する可能性があります。 Complex クラスの演算子。
複数の定義に対する解決策
複数の定義エラーの解決策は次のとおりです。
複数定義エラーを回避するには、inline キーワードを使用するか、定義をソース ファイルに移動することをお勧めします。
real() と <
の処理の違い コードサンプルでは、real() 関数complex.h で宣言されていますが、定義されていません。これが、コンパイラが複数定義エラーを報告しない理由です。クラス宣言で宣言されたメンバー関数は暗黙的にインライン化されます。つまり、その定義はヘッダーを含むすべての変換単位に挿入されます。これは演算子 << には当てはまりません。 complex.h.
で定義されている関数以上がC コードで「複数定義」エラーがスローされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。