行列を使用するプロジェクトに取り組んでおり、オーバーロードされた演算子に問題があります。
これらの使いやすい入出力関数を宣言しました。
friend std::istream& operator>>(std::istream& is, MathMatrix& m); //keyboard input
friend std::ostream& operator<<(std::ostream& os, const MathMatrix& m); // screen output
friend std::ifstream& operator>>(std::ifstream& ifs, MathMatrix& m); // file input
friend std::ofstream& operator<<(std::ofstream& ofs, const MathMatrix& m); // file output
最後の 1 つを定義しているときに、この単純なコードでエラーが発生し、コンパイルできません。
// file output
std::ofstream& operator<<(std::ofstream& ofs, const MathMatrix& m) {
//put matrix dimension in first line
ofs << m.n << std::endl;
//put data in third line
for (int i=0; i<m.n; i++) {
for (int j=0; j<m.n; j++) ofs << m(i,j) << " ";
ofs << std::endl;
}
return ofs;
}
エラーは にありofs << m.n
ます (および同様のものは にありofs << m(i,j)
ます)。それは言います:
const MathMatrix &m
Error: more than one operator "<<" matches these operands:
function "operator<<(std::ofstream &ofs, const MathMatrix &m)"
function "std::basic_ostream<_Elem, _Traits>::operator<<(int _Val) [with _Elem=char, _Traits=std::char_traits<char>]"
operand types are std::ofstream << const int
しばらくして、おそらく問題は のMathMatrix
ようなコンストラクターがあることにあるのではないかと考えたMathMatrix (int n)
ので、コンパイラーは から に変換しようとしている可能性がありint n
ますMathMatrix(int n)
。なぜそうするのかわかりませんが、IDE が提供する説明を考えると、それが私が考えることができる唯一の説明です。
私が欠けているものを見ることができますか?それを修正する方法を知っていますか?