1

わかった。私は C++ でのポリモーフィズムがあまり得意ではありませんが、今は問題があります。これらのクラスを想像してください:

class Parent {
public:
     Parent();
     virtual ~Parent();
};

class Child : public Parent
{
public:
     Child();
};

class Director
public:
     Director();
     void doStuff(Parent* p);
};


// Assume we have a instance of Director, and call the doStuff function here:
doStuff(new Child()); // Gives error

エラーが発生します

パラメータ 1 を 'Child *' から 'Parent *' に変換できません

そして、私の簡単な質問は、なぜこれが機能しないのですか? 何らかのキャストを行う必要がありますか、それとも何が問題なのですか?

編集: すべてのファイルをそのままここに置きます。問題はインクルージョンにあると思います。#ifndef などを使用してどのように実行する必要があるのか​​ まったくわからないからです。それらをチェックしてください。
Director.h: http://pastebin.com/2uJqezju
Director.cpp: http://pastebin.com/SZ6cuBJC
IApp.h: http://pastebin.com/euCAwpnL
IApp.cpp: http://pastebin.com /JHDuQUhW
IScene:h: http://pastebin.com/cweH9G6p
IScene.cpp: http://pastebin.com/9epW0dRA

次に、いくつかのインスタンスを作成しました:
GameApp.h (EDGE::IApp を継承): http://pastebin.com/QbjbVqSi
GameApp.cpp: http://pastebin.com/sYJvmbeP
GameScene.h (EDGE:: IScene): http://pastebin.com/K1WYNvRf
GameScene.cpp: http://pastebin.com/uJx3FLBW

それらをチェックアウトすることを恐れないでください。それぞれに 10 行ほどのコードがあります。しかし、問題は GameApp.cpp にあり、ここで GameScene のインスタンスを作成し、それを Director->createNewScene(IScene* scene) に渡します。

4

1 に答える 1

1

Director.h:

class IScene;

名前空間内にある必要があります

于 2013-01-11T15:32:58.837 に答える