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

时间:2017-03-22 04:32:34

标签: c++ inheritance constructor

我在我的一个大学课程中有一个编程任务。教授给了我们特定的代码来告诉我们不要改变他的代码。我应该创建一个名为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)
                             ^

I have made a pad on CodePad with an example(简介中的示例仅适用于此问题,并不是我的实际代码,但会显示此问题所需的最少代码。)

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

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

我在我的CodePen示例中尝试了此问题的解决方案:How do I call the base class constructor?,但它仍然无法运行。因此,我不相信这是我的问题的解决方案。

1 个答案:

答案 0 :(得分:2)

你可以尝试这个例子。我使用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;
}

Sample-code