发生什么事,我听不懂。
有一个名为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 ++的新手
答案 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}
{...}
...