2009-05-30 8 views
4

L'erreur se produit lorsque je tente de le faireQu'est-ce que « ne peut convertir pointeur « this » de « main const » à « main & » signifie? (C++)

friend std::ostream& operator<<(std::ostream& os, const hand& obj) 
{ 
    return obj.show(os, obj); 
} 

où la main est une classe I » avons créé et spectacle est

std::ostream& hand::show(std::ostream& os, const hand& obj) 
{ 
    return os<<obj.display[0]<<obj.display[1]<<obj.display[2]<<obj.display[3]<<obj.display[4]; 
} 

où l'affichage est déclarée comme char display[6].

est-ce que quelqu'un sait ce que signifie l'erreur?

Répondre

9

Vous devez faire hand::show(...) une méthode const; et il n'a pas de sens de passer la référence d'obj - il reçoit déjà cela comme le pointeur 'this'.

Cela devrait fonctionner:

class hand { 
public: 
    std::ostream& show(std::ostream &os) const; 
... 
}; 

friend std::ostream& operator<<(std::ostream& os, const hand& obj) 
{ 
    return obj.show(os); 
} 
2

Vous avez besoin de la fonction elle-même être aussi const (notez le « const » à la fin de la première ligne):

std::ostream& hand::show(std::ostream& os, const hand& obj) const 
{ 
    return os<<obj.display[0]<<obj.display[1]<<obj.display[2]<<obj.display[3]<<obj.display[4]; 
} 
Questions connexes