我正在处理一个带有矩阵的项目,但我遇到了重载运算符的问题。
我已经声明了这些用户友好的输入/输出函数:
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
在定义最后一个时,在这段简单的代码中,我得到了一个错误并且无法编译:
// 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 给出的解释,这是我能想到的唯一解释。
你能看到我错过了什么吗?你知道如何解决吗?