运算符重载的错误

时间:2012-11-14 15:23:04

标签: c++ operator-overloading

我有两个不同的运算符重载。由于某种原因,它给出了错误。 如果我删除其中一个,它没有显示任何错误。我可以知道为什么吗?

我可以将两者合并吗?

用于在屏幕上打印。

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;}'

1 个答案:

答案 0 :(得分:3)

您不需要第二个版本。你可以使用第一个:

Point p;
std::ofstream pointsFile("points.txt");
pointsFile << p << "\n";

首先,std::ostream& operator<<适用于写入文件以及写入标准输出或stderrt

其次,假设Poind2D继承自Point,将Point2D传递给采用Point引用的函数或运算符也会有效。