我正在尝试学习C中的覆盖运算符 . 但我坚持这个:
.. \ src \ application.cpp:在函数`int main()':.. \ src \ application.cpp:29:错误:'std :: operator <<中的'operator <<'不匹配[与_Traits = std :: char_traits](((std :: basic_ostream>&)(&std :: cout)),((const char *)“Poly A:”))<<(&A) - > Poly :: operator( 0)”
这是导致错误的行,似乎我的postincrement运算符没有返回任何可打印的内容:
cout << "Poly A: " << A++ << endl;
我有一个Poly.h和一个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;
}
1 回答
我认为问题在于您将参数声明为引用:
引用不会绑定到从
operator++
返回的临时值 . 如果将Poly
参数设为const
参考,则应该能够输出它 .