Простой ответ - так работает C ++ :) Длинный ответ: Когда вы объявляете класс в C ++, он создает конструктор по умолчанию для этого класса, если это возможно. То, как вы определили class Game
- у него есть конструктор не по умолчанию. То есть - экземпляр класса Game может быть создан только путем передачи значения String:
String a{...};
Game game{a};
Все классы, производные от class Game
, должны вызывать конструктор Game::Game(String& )
для его инициализации.
Таким образом, ваш производный класс LGame не может быть создан, поскольку он требует инициализации Game
fist.
Но класс LGame не объявляет конструктор.
Когда вы определяетеновый класс class LGame
по умолчанию C ++ «пытается» создать конструктор по умолчанию для вас LGame::LGame()
. В этом случае - это не может быть сделано, потому что класс Game
имеет конструктор не по умолчанию, который вы определили. Вам нужно явно указать компилятору, как создать инициализировать экземпляр LGame - то есть вам нужно явно определить конструктор:
class LGame: public Game{
public:
LGame(String const& s): Game{s}
{...}
...