【发布时间】:2021-07-07 00:58:04
【问题描述】:
我有这个问题,但我无法解决。我只知道 InitData 函数是 100% 正确的。但是我试图找到如何需要创建我的类以使这段代码工作(不对 InitData 函数做任何更改)
class Bird
{
public:
int data[10];
int color;
Bird() {
ZeroMemory(data, 10 * 4);
color = 0;
}
Bird(int* _data, int _color) {
memcpy(data, _data, 10 * 4);
color = _color;
}
//more code
};
class Animal : Bird
{
public:
int data[10];
Animal() {
ZeroMemory(data, 10 * 4);
}
Animal(int* _data) {
memcpy(data, _data, 10 * 4);
}
//more code
};
Animal* InitData(int* _data, bool isBird) {
if (isBird) {
Bird* bird = new Bird(_data, 0);
return bird;
}
else {
Animal* animal = new Animal(_data);
return animal;
}
return nullptr;
}
也许对虚拟课程有所帮助?
编译器给我错误'E0120返回值类型与函数类型不匹配',在InitData的这一行'return bird;'。 我使用 Visual Studio 2019、Release(x64)、C++17
已解决: 所以我继承了错误的类。需要将 Animal 继承到 Bird。所以需要改变 “类鸟”到“类鸟:公共动物” 和 'class Animal : Bird' 到 'class Animal'
谢谢大家!
【问题讨论】:
-
为什么
Animal派生自Bird?应该反过来。 -
不,您的
InitData函数不是 100% 正确的。它返回一个指向子类的指针,而 NOT 是父类。 -
您的编译器是正确的,但有错误。
InitData承诺返回一个Animal但你返回一个Bird这是你的基类。正如@0x499602D2 已经指出的那样,您的继承方式是错误的,这也是导致此错误的原因。 -
@SamVarshavchik 和 0x499602D2 对不起,我编辑了标题
-
是的。鸟是动物,但动物不一定是鸟,因为马也是动物。所以应该是
class Animal...; class Bird: public Animal ...
标签: c++ class inheritance virtual-functions