我有两个不同的运算符重载。由于某种原因,它给出了错误。 如果我删除其中一个,它没有显示任何错误。我可以知道为什么吗?
我可以将两者合并吗?
用于在屏幕上打印。
ostream& operator<<(ostream &out, const Point &p) {
return out << "[" << setw(4) << p.getX() << setw(1) << "," << setw(4) << p.getY() << "] " << setprecision(3) << p.getScalarValue() << endl;
}
用于在文本文件上打印。
ofstream& operator<<(ofstream &out, const Point2D &p){
return out << "[" << setw(4) << p.getX() << setw(1) << "," << setw(4) << p.getY() << "] " << setprecision(3) << p.getScalarValue() << endl;
}
错误:
Point.cpp:91:147:错误:类型'std :: ofstream&amp;的引用无效初始化来自'std :: basic_ostream :: __ ostream_type {aka std :: basic_ostream}'的表达式的{aka std :: basic_ofstream&amp;}'
答案 0 :(得分:3)
您不需要第二个版本。你可以使用第一个:
Point p;
std::ofstream pointsFile("points.txt");
pointsFile << p << "\n";
首先,std::ostream& operator<<
适用于写入文件以及写入标准输出或stderrt
其次,假设Poind2D
继承自Point
,将Point2D
传递给采用Point
引用的函数或运算符也会有效。