Tous les objets de mon programme héritent d'une classe Container. La classe Container a une méthode virtual BaseNode* getParent() const;
et une méthode virtual void setParent(BaseNode *p);
.C++: conversion non valide de 'BaseNode *' à 'Match *'
J'ai une classe Set
(Situé dans un match de tennis, pas une structure de données) qui a la classe Match
comme son parent (via setParent()
) mais depuis Set
hérite de Container
, le programme crée une structure d'arbre de haut en bas et la classe Set
est un enfant, il n'a pas besoin d'avoir des méthodes pour suivre et maintenir des informations sur son parent au-delà de ce que Container
fournit.
L'erreur C++: invalid conversion from ‘BaseNode*’ to ‘Match*’
apparaît dans la méthode ci-dessous lorsque j'essaie de compiler mon programme. (Player* getPlayer1() const;
existe seulement dans la classe Match
)
Player* Set::getPlayer1() const{
return getParent()->getPlayer1();
}
Ceci est ma structure d'héritage pour match. (Notez que TreeNode
est un modèle)
Match -> TreeNode<Set> -> BaseNode -> Container
Je ne comprends pas pourquoi je reçois une erreur de conversation. J'ai essayé de lire mon manuel mais c'est une référence plutôt pauvre. Google vient de fournir trop d'informations non pertinentes.
Modifier
Player* Set::getPlayer1() const{
return dynamic_cast<Match>(getParent())->getPlayer1();
}
provoque
error: cannot dynamic_cast ‘#‘obj_type_ref’ not supported by dump_expr#<expression error>((&((const Set*)this)->Set::<anonymous>))’ (of type ‘class BaseNode*’) to type ‘class Match’ (target is not pointer or reference)
Modifier 2
Je viens de réaliser que j'ai besoin dynamic_cast<Match*>
qui fonctionne.
L'ensemble hérite du conteneur, Match hérite de TreeNode. La structure entière est en forme d'arbre. Les matchs ont Set enfants. Les détails d'un jeu ne sont pas requis pour cette application, donc Set contient les statistiques. – epochwolf
"Effrayant" est tout ce que je peux dire. – Tim
Effrayant mais j'ai environ 80% moins de code et j'ai appris beaucoup plus de choses que je ne l'aurais fait sans héritage. – epochwolf