ヘッダー ファイル内の演算子のオーバーロードの複数の定義
提供されたコード例では、コンパイラで演算子の複数定義エラーが発生しました<< ; Complex クラスのオーバーロード。ヘッダー ファイルをプリプロセッサ ガードで保護しているにもかかわらず、このエラーは演算子<<の定義が原因で発生します。
具体的には、ヘッダー ファイル内の行 std::ostream&operator<<(std::ostream& o, const Complex& Cplx) は宣言ではなく、定義です。その結果、complex.cpp と main.cpp の両方にヘッダー ファイルがインクルードされると、コンパイラは演算子<<の重複定義を検出します。
暗黙的にインライン化されるため、複数の定義エラーの影響を受けにくい real() メンバー関数とは異なり、演算子<<オーバーロードはヘッダー ファイルで明示的に定義されます。したがって、複数の定義を許可するには、inline キーワードを使用して明示的にインラインとしてマークする必要があります。
inline std::ostream& operator<<(std::ostream& o, const Complex& Cplx) { return o << Cplx.m_Real << " i" << Cplx.m_Imaginary; }
あるいは、演算子<<の定義も可能です。多重定義エラーを防ぐために、オーバーロードを complex.cpp ソース ファイルに移動できます。宣言と定義を分離することにより、コンパイラは演算子<<への参照を正しく処理できます。 main.cpp 内の関数を複数の定義に遭遇することなく実行できます。
以上がヘッダー ファイル内の演算子のオーバーロードが複数の定義エラーにつながるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。