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 从“子 *”转换为“父 *”

我的简单问题是,为什么这不起作用?我需要做任何类型的演员或什么,或者是什么问题?

编辑: 我把我所有的文件都放在这里。我认为问题在于我的包含,因为我真的不知道应该如何使用#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 (inherits EDGE::IApp): http://pastebin.com/QbjbVqSi
GameApp.cpp: http://pastebin.com/sYJvmbeP
GameScene.h (inherits EDGE:: IScene):http
: //pastebin.com/K1WYNvRf GameScene.cpp:http ://pastebin.com/uJx3FLBW

不要害怕检查它们,它们每个都有大约 10 行代码。但问题出在 GameApp.cpp 中,我在其中尝试创建 GameScene 的实例,并将其传递给 Director->createNewScene(IScene* scene)。

4

1 回答 1

1

导演.h:

class IScene;

应该在命名空间内

于 2013-01-11T15:32:58.837 回答