2012-11-14 71 views
0

我有兩個不同的運算符重載。由於某種原因,它給錯誤。 如果我刪除它,它不會顯示任何錯誤。我可以知道爲什麼嗎?運算符超載的錯誤

我可以結合嗎?

這是用於在屏幕上打印。

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: error: invalid initialization of reference of type ‘std::ofstream& {aka std::basic_ofstream&}’ from expression of type ‘std::basic_ostream::__ostream_type {aka std::basic_ostream}’

+2

你在第二個定義中寫了'ofstream'而不是'ostream'。 – avakar

+0

91線上有什麼? – xiaoyi

+0

你想寫一個'ofstream'版本,'Point2D'版本,還是兩者? – juanchopanza

回答

3

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

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

第一,std::ostream& operator<<作品寫入文件,以及寫入標準輸出或stderrt

其次,從Point假設Poind2D繼承,傳遞一個Point2D的功能或者採用Point參考的操作員也可以工作。

+0

第二個參數不是相同的類型。 – xiaoyi

+0

他要求'原因'.. – Anirudha

+0

@ Fake.It.Til.U.Make.It我無法弄清楚OP究竟在問什麼。 – juanchopanza