C ++: недопустимое преобразование из «BaseNode *» в «Match *»
-
19-08-2019 - |
Вопрос
Все объекты в моей программе наследуются от класса контейнера. Класс 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
)
Это моя структура наследования для Match. (Обратите внимание, что TreeNode
является шаблоном)
Я не понимаю, почему у меня возникает ошибка разговора. Я пробовал читать свой учебник, но это довольно плохой справочник. Google просто предоставил слишком много нерелевантной информации.
< sizesЭдит родовое слово
причины
родовое словоИзменить 2
Я только что понял, что мне нужен сгенерированный код тегов, который работает.
Решение
Проблема в том, что getParent()
возвращает код BaseNode*
, который может быть указателем на любой тип кода BaseNode
- он может указывать на несвязанный класс, который также является производным от BaseNode
.Если вы на 100% уверены, что родительский элемент должен иметь тип Match
, вы должны сначала привести родительский элемент к Match*
, а затем вы можете вызвать для этого getPlayer()
:
Если родительский код не нужен, генерируемый код кода может вернуть NULL, поэтому обязательно проверьте это.
Другие советы
Я думаю, вам действительно нужно реорганизовать свою иерархию и имена методов ... Это не имеет ничего общего с вашим вопросом, но в целом кажется трудно понять, почему Set наследуется от Match.(у матча нет наборов?)
игры состоят из очков, наборы состоят из игр, а матч состоит из наборов ... очко выиграно игроком.
вам, вероятно, следует структурировать его более близко к реальному миру.
только мои 0,02 доллара
ИЗМЕНИТЬ
У меня, вероятно, был бы объект Match, который содержит карту наборов (карта, т.е. набор один, два, три и т. д.) и метод Player (int), а не Player1 () и player2 ().Также не кажется необходимым иметь метод для player в классе Set.Набор будет указывать на матч, в котором он разыгрывается.