【问题标题】:Passing pointer to derived class, to function that expects pointer to base class?将指向派生类的指针传递给需要指向基类的指针的函数?
【发布时间】:2012-12-26 04:26:08
【问题描述】:

好的。我不太擅长 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(继承 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)。

【问题讨论】:

  • works for me 当我用你的代码片段制作一个可编译的例子时。您能否发布一个完整的可编译程序来演示该错误?
  • 这里相同:codepad.org/aB6zAyq5
  • 应该可以正常工作。您是否有干扰类的定义或继承的东西?也许您在现实中的代码与您在此处发布的代码不太一样。
  • 确保你来自正确的类。使用命名空间时,您可能实际上是从另一个名为 Parent 的类派生而来的。
  • Iscene.h 有一个} 太多

标签: c++ pointers reference polymorphism virtual


【解决方案1】:

导演.h:

class IScene;

应该在命名空间内

【讨论】:

  • 非常感谢。就是这样,成功了!
猜你喜欢
  • 2023-03-22
  • 2023-04-07
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多