2009-12-13 457 views
0

我想學習C++重寫操作符。但我堅持這一點:如何在C++中重寫++運算符,然後使用覆蓋<<運算符打印輸出?

..\src\application.cpp: In function `int main()':

..\src\application.cpp:29: error: no match for 'operator<<' in 'std::operator<< [with _Traits = std::char_traits](((std::basic_ostream >&)(&std::cout)), ((const char*)"Poly A: ")) << (&A)->Poly::operator++(0)'

下面是導致錯誤的路線,看來,我的後置操作不返回任何東西打印:我有一個Poly.h和

cout << "Poly A: " << A++ << endl; 

Poly.cpp文件:

class Poly{ 
friend istream& operator>>(istream &in, Poly &robject); 
friend ostream& operator<<(ostream &out, Poly &robject); 
public: 
    Poly(); 

    Poly operator++(int); 
    Poly operator++();  
private: 
    int data[2]; 
}; 

Poly.cpp:

Poly Poly::operator++(){ 
data[0]+=1; 
data[1]+=1; 
return *this;} 

Poly Poly::operator++ (int){ 
    Poly result(data[0], data[1]); 
     ++(*this); 
    return result; 
} 
ostream& operator<<(ostream &out, Poly &robject){ 
out << "(" << robject.data[0] << ", " << robject.data[1] << ")"; 
return out; 
} 

回答

4

我認爲問題是,你宣佈你的參數作爲參考:

ostream& operator<<(ostream &out, Poly &robject) 

參考不會綁定到您從operator++返回臨時工。 如果你使Poly參數爲const參考,你應該可以輸出它。

+0

哦,這就是const所做的。它工作感謝。 – 2009-12-13 01:28:49

+0

是的,這是正確的。您需要在運算符<<()函數中使用Poly的副本或const引用(首選)。 – Andrey 2009-12-13 01:29:13

+0

等等。如果你想綁定到一個臨時的並修改它,這將會是一個問題,但在這種情況下這不是問題。 – CAdaker 2009-12-13 01:30:57