Все объекты в моей программе наследуются от класса Container. Класс Container имеет метод virtual BaseNode* getParent() const;
и метод virtual void setParent(BaseNode *p);
.
У меня есть класс Set
(установленный в теннисном матче, а не структура данных), у которого класс Match
является родительским (через setParent()
), но поскольку Set
наследуется от Container
, Программа создает древовидную структуру сверху вниз, а класс Set
является дочерним, ей не нужно иметь методы для отслеживания и поддержки информации о своем родителе, помимо того, что предоставляет Container
.
Ошибка C++: invalid conversion from ‘BaseNode*’ to ‘Match*’
появляется в методе ниже, когда я пытаюсь скомпилировать свою программу. (Player* getPlayer1() const;
существует только в классе Match
)
Player* Set::getPlayer1() const{
return getParent()->getPlayer1();
}
Это моя структура наследования для Match. (Обратите внимание, что TreeNode
является шаблоном)
Match -> TreeNode<Set> -> BaseNode -> Container
Я не понимаю, почему я получаю ошибку разговора. Я пытался читать мой учебник, но это довольно плохой справочник. Google только что предоставил слишком много ненужной информации.
Редактировать
Player* Set::getPlayer1() const{
return dynamic_cast<Match>(getParent())->getPlayer1();
}
1031 * вызывает *
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)
Редактировать 2
Я только что понял, что мне нужно dynamic_cast<Match*>
, который работает.