6

私の頭は爆発しそうです。'<<'演算子を2つのクラス(puntoとvector)でオーバーロードしようとして間違っていることを理解できません。コードは次のとおりです。コードは、クラスの外のクラスヘッダーファイルに書き込まれます。

   std::ostream& operator << (ostream& salida, const punto& origen)
    {   
        // Se escriben los campos separados por el signo
        salida << "Punto --> x: " << origen.xf << " , y: " << origen.yf;
        return salida;
    }

    std::ostream& operator << (ostream& salida, const vector& origen)
    {
        // Se escriben los campos separados por el signo
        salida << "Punto --> x: " << origen.p1.xf << " , y: " << origen.p1.yf;
            return salida;
    }

エラーはリンクステップで発生し、非常に単純な例であるため、クラスヘッダーとの二重リンクはありません。

ここに画像の説明を入力してください

4

1 に答える 1

15

この特定のエラーは、関数が2つの異なる変換単位にコンパイルされることを意味します。これは、関数定義をヘッダーに配置し、それを2つの異なるソースファイルに含める場合に発生する可能性があります。

大まかに言えば、2つの解決策があります。

  1. ヘッダーで関数を宣言し、定義しないでください。ソースファイルで定義(実装)します。
  2. 関数を静的またはインラインとして宣言します。
于 2013-02-17T17:56:33.707 に答える