<< のあいまいなオーバーロードostream の演算子
<< をオーバーロードしようとしたときにエラーが発生しました。 Matrix クラスの演算子は、演算子関数が引数を 1 つだけ取らなければならないという要件から生じています。この場合、エラーは次のコードが原因である可能性があります:
std::ostream& Matrix::operator <<(std::ostream& stream, const Matrix& matrix) { [...] }
演算子<<関数は Matrix クラスのメンバー関数として定義されているため、暗黙的に Matrix オブジェクトを引数として受け取ります。その結果、関数は実際には ostream オブジェクトと Matrix オブジェクトという 2 つの引数を取ります。
この問題を解決するには、2 つのオプションがあります:
フレンド関数を使用する: フレンド関数はクラスのメンバーではありませんが、そのプライベートおよび保護されたメンバーにアクセスできます。演算子<<を定義することにより、関数をフレンド関数として使用すると、暗黙的な Matrix オブジェクトの引数を避けることができます。
friend std::ostream& operator<< (std::ostream& stream, const Matrix& matrix) { [...] }
Matrix オブジェクトを参照として渡す: Matrix オブジェクトを次のように渡します。参照の場合、暗黙的な Matrix オブジェクトを回避できます引数。
std::ostream& operator<< (std::ostream& stream, const Matrix& matrix) const { [...] }
2 番目のオプションには演算子 << が必要であることに注意してください。 Matrix オブジェクトを変更しないため、関数は const として宣言される必要があります。
以上が私の行列クラスの ` はなぜの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。