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;
}
oh, c'est ce que fait const. cela a fonctionné merci. –
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
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