2017-03-22 16 views
0

私は私の大学のクラスの一つでプログラミングの課題を持っています。教授は具体的なコードを教えてくれました。コードを変更しないように教えてくれました。私は、Mgrというクラスから継承するGameMgrというクラスを作ることになっています。ここで彼はMgr.hのための私達に与えたものの簡易版である:親クラスがC++でデフォルトコンストラクタを持たない場合、継承クラスでコンストラクタを使用するにはどうすればよいですか?

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

可能性のある重複した[私は、基本クラスのコンストラクタを呼び出すにはどうすればよいです?](http://stackoverflow.com/questions/6923722/how-do-i-call-the-base- – Ari0nhh

+0

@ Ari0nhh私はCodePadの例で答えようとしましたが、動作しません。 – kingcobra1986

答えて

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

+0

コードブロック内の変数をコンストラクタで設定しているコードを変更できません。 – kingcobra1986

+0

私は 'Mgr'クラスに何も変更を加えていません。この例のコンパイルを可能にするために、私は 'int'を追加し、それがどのように初期化されているかを示しました。 – Rishi

+0

彼のコードは以下の通りです: 'Mgr(Engine * eng){engine = eng}' 'Mgr(Engine * eng):engine(eng){}' – kingcobra1986

関連する問題