C ++: недопустимое преобразование из «BaseNode *» в «Match *»

StackOverflow https://stackoverflow.com/questions/341668

  •  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.Набор будет указывать на матч, в котором он разыгрывается.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top