2009-12-13 6 views
0

J'essaie d'apprendre les opérateurs de substitution en C++. Mais je suis coincé avec ceci:Comment remplacer l'opérateur ++ en C++ et ensuite imprimer la sortie en utilisant un opérateur << override »?

..\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)'

est ici la ligne provoquant l'erreur, il semble que mon opérateur post-incrémentation ne retourne rien à imprimer:

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

J'ai un Poly.h et fichier 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; 
} 

Répondre

4

Je pense que le problème est que vous déclarez vos paramètres comme référence:

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

La référence ne se lie pas aux que vous retourniez temporaires de votre operator++. Si vous faites du paramètre Poly une référence const, vous devriez pouvoir le sortir.

+0

oh, c'est ce que fait const. cela a fonctionné merci. –

+0

Oui, c'est correct. Vous devez utiliser une copie de Poly ou une référence const (préférée) dans la fonction operator(). – Andrey

+0

Entre autres choses. Ce sera un problème si l'on veut à la fois se lier à un temporaire et le modifier, mais ce n'est pas un problème dans ce cas. – CAdaker