当父类在 C++ 中没有默认构造函数时,如何在继承的类中使用构造函数?

How do I use the constructor in inherited classes when the parent class doesn't have a default constructor in C++?

本文关键字:构造函数 继承 C++ 父类 默认      更新时间:2023-10-16

我在大学课程中有一个编程作业。教授给了我们特定的代码,并告诉我们不要改变他的代码。我应该创建一个名为 GameMgr 的类,该类继承自一个名为 Mgr 的类。 以下是他为 Mgr.h 提供的内容的简化版本:

class Engine;
class Mgr 
{
public:
Engine *engine;
Mgr(Engine *eng);
virtual ~Mgr();
};

我正在尝试创建一个名为GameMgr的类:

class GameMgr: public Mgr
{
public:
GameMgr(Engine* eng);
void Run();
};

尝试编译代码时出现错误:

error: no matching function for call to ‘Mgr::Mgr()’
GameMgr::GameMgr(Engine* eng)
^

我在CodePad上用一个例子做了一个垫子(pad中的示例仅用于这个问题,不是我的实际代码,但显示了这个问题所需的最少代码)。

我尝试将默认构造函数添加到我的 GameMgr 类,但仍然收到错误。我假设这是可以做到的,因为它是我的教授的代码,但我知道解决它的唯一方法是将 Mgr 类更改为具有 Mgr()。

当父类在 C++ 中没有默认构造函数时,如何在继承的类中使用构造函数?

我尝试了这个问题的解决方案:在我的 CodePen 示例中,如何调用基类构造函数?,但它仍然不起作用。因此,我不认为这是解决我问题的办法。

你可以试试这个例子。我使用了一个int来简化。

#include <iostream>
using namespace std;
class Mgr 
{
public:
int a;
Mgr(int _a):a(_a){}
virtual ~Mgr(){}
};
class GameMgr: public Mgr
{
public:
GameMgr(int _b):Mgr(_b) {}
~GameMgr(){}
void Run();
};
int main() {
GameMgr game_mgr(9);
return 0;
}

示例代码