如果在子类中没有构造函数方法,则会出现错误“没有匹配的函数来调用'LGame :: LGame(String&)'”

时间:2019-11-06 12:53:33

标签: c++ arduino

发生什么事,我听不懂。

有一个名为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 个答案:

答案 0 :(得分:2)

简单的答案是-这就是C ++的工作方式:) 长答案: 在C ++中声明类时,如果可能,它将为该类创建一个默认构造函数。 您定义class Game的方式-它具有非默认构造函数。也就是说-类Game的实例只能通过传递String的值来创建:

String a{...};
Game game{a};

class Game派生的所有类都必须调用Game::Game(String& )构造函数才能对其进行初始化。

因此无法创建派生类LGame,因为它需要初始化Game的拳头。

但是LGame类没有声明构造函数。

默认情况下,当您定义新类class LGame时,C ++会尝试为您LGame::LGame()创建一个默认构造函数。在这种情况下-无法完成,因为Game类具有您定义的非默认构造函数。您需要明确告诉编译器如何创建LGame实例的初始化-也就是说,您需要明确定义构造函数:

class LGame: public Game{
public: 
  LGame(String const& s): Game{s} 
  {...}
...