J'ai une classe d'URL qui surcharge les ==, <, >, et les opérateurs! = Pour une comparaison simple. La classe d'URL a un membre de données de chaîne et quelques fonctions pour agir sur la chaîne. Les opérateurs fonctionnent correctement lorsqu'ils sont testés avec la classe d'URL. J'ai également une classe Page qui a un membre de données d'URL. J'essaye de surcharger les mêmes opérateurs dans la classe Page. L'égalité dans la classe Page est basée sur l'égalité de leurs URL respectives, donc j'utilise les opérateurs booléens de la classe URL dans la comparaison des pages. Cela crée des erreurs de compilation que je ne peux pas comprendre. Code pour les opérateurs d'URL:Erreur de compilation lors de l'utilisation d'une surcharge d'opérateur imbriquée en C++
bool URL::operator ==(URL & u) const {
//url is the string instance variable
return url == u.GetURL();
}
Code
pour les opérateurs Page:
bool Page::operator ==(Page & p) const {
//url is the URL instance variable of the Page class
return url == p.GetURL();
}
Cela produit des erreurs comme ceci:
src/Page.cpp: In member function ‘bool Page::operator==(Page&) const’:
src/Page.cpp:21: error: no match for ‘operator==’ in ‘((const Page*)this)->Page::url == Page::GetURL()()’
inc/URL.h:118: note: candidates are: bool URL::operator==(URL&) const
Je prédis qu'il est quelque chose de stupide que j'oubliais. Voulez-vous me prouver le droit?
éditer: Const correcte a mordu dans le cul. Merci pour l'aide.
Lorsque vous écrivez des classes C++ dont instance sont destiné à être utilisé comme des valeurs à manipuler et à comparer, la constabilité est très importante. Non seulement cela vous aide à éviter les erreurs du compilateur, mais il permet aussi au compilateur d'effectuer des optimisations agressives, comme de ne pas charger les variables plus d'une fois dans les registres, etc. – pyon