Многоуровневое наследование классов с несовместимыми конструкторами

У меня есть 3 класса, которые наследуются друг от друга — GameScreen является базовым классом, из которого происходит MenuScreen. Затем у меня есть третий класс «TitleScreen», который происходит от «MenuScreen».

Поток в основном из базового класса: «GameScreen» -> «MenuScreen» -> «TitleScreen»

Базовый класс «GameScreen» не имеет параметров в конструкторе, как в случае с «TitleScreen», однако мне нужен параметр для «MenuScreen». В настоящее время у меня есть файлы заголовков как:

GameScreen.h

class GameScreen
{
public:
GameScreen();
}

MenuScreen.h

class MenuScreen : public GameScreen
{
public:
MenuScreen(std::string title);
}

TitleScreen.h

class TitleScreen : public MenuScreen
{
public:
TitleScreen(std::string title) : MenuScreen(title);
}

Мне трудно понять, возможно ли это в C ++ (я следую примеру C # для Game State Management, который делает это). Прочитав наследование классов в некоторых книгах, я имею дело только с параметрами, унаследованными от базового класса, так как в моем базовом классе нет параметров.

0

Решение

  1. Вам не хватает ; после каждого объявления класса.

  2. Если ты пишешь TitleScreen(std::string title) : MenuScreen(title) вы определяете тело метода, но тело отсутствует … поэтому вы должны поместить просто объявление в ваш файл TitleScreen.h:

    class TitleScreen : public MenuScreen
    {
    public:
    TitleScreen(std::string title);
    };
    

    и затем поместите тело конструктора в TitleScreen.cpp:

    #include "TitleScreen.h"
    TitleScreen::TitleScreen(std::string title) : MenuScreen(title)
    {
    // ..
    }
    

Изменить: исправлена ​​терминология согласно этот вопрос.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]