Ошибка «нет подходящей функции для вызова LGame :: LGame (String &)», если в дочернем классе нет метода конструктора - PullRequest
0 голосов
/ 06 ноября 2019

Что-то происходит, я не могу понять.

Есть класс под названием Game, и у него есть конструктор

class Game
{
  public:

    Game(String& _name){
      clientID = _name;
    }
}

class LGame: public Game{
  public:

  // ...another code
}

Я звоню

String myName = "balls3"; //name of module
LGame game(myName);

иесть ошибка error: no matching function for call to 'LGame::LGame(String&)'

Но если я добавлю тот же конструктор в дочерний класс, все будет работать

class LGame
{
  public:

    LGame(String& _name){
      clientID = _name;
    }

// ... другой код}

кто яделаю неправильно. Я новичок в Arduino / C ++

1 Ответ

2 голосов
/ 06 ноября 2019

Простой ответ - так работает 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} 
  {...}
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...