函数 return 从子 class 指向父 class 的指针
function return pointer to parent class from child class
我有这个问题,但我无法解决。我只知道 InitData 函数是 100% 正确的。但是我试图找到如何创建我的 classes 来使这段代码工作(不对 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;
}
也许对虚拟 classes 做了什么?
编译器在 InitData 的这一行 'return bird;' 中给我错误 'E0120 return value type does not match the function type'。
我使用 visual studio 2019,Release(x64),C++17
已解决:
所以我继承了错误的class。需要继承 Animal 到 Bird。所以需要改变
'class Bird' 至 'class Bird : public Animal'
和 'class Animal : Bird' 到 'class Animal'
谢谢大家!
你的继承方式是错误的。
此外,您不需要复制派生 class 中的数据,因为这是 baseclass 的用途,因此您应该调用适当的构造函数,而不是从 baseclass 复制代码=13=].
class Animal
{
public:
int data[10];
Animal()
{
ZeroMemory(data, sizeof(int)*10);
}
Animal(int* _data)
{
memcpy(data, _data, 10 * sizeof(int));
}
//more code
};
class Bird : public Animal
{
public:
int color;
Bird()
{
color = 0;
}
Bird(int* _data, int _color)
: Animal(_data)
{
color = _color;
}
//more code
};
我有这个问题,但我无法解决。我只知道 InitData 函数是 100% 正确的。但是我试图找到如何创建我的 classes 来使这段代码工作(不对 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;
}
也许对虚拟 classes 做了什么?
编译器在 InitData 的这一行 'return bird;' 中给我错误 'E0120 return value type does not match the function type'。 我使用 visual studio 2019,Release(x64),C++17
已解决: 所以我继承了错误的class。需要继承 Animal 到 Bird。所以需要改变 'class Bird' 至 'class Bird : public Animal' 和 'class Animal : Bird' 到 'class Animal'
谢谢大家!
你的继承方式是错误的。 此外,您不需要复制派生 class 中的数据,因为这是 baseclass 的用途,因此您应该调用适当的构造函数,而不是从 baseclass 复制代码=13=].
class Animal
{
public:
int data[10];
Animal()
{
ZeroMemory(data, sizeof(int)*10);
}
Animal(int* _data)
{
memcpy(data, _data, 10 * sizeof(int));
}
//more code
};
class Bird : public Animal
{
public:
int color;
Bird()
{
color = 0;
}
Bird(int* _data, int _color)
: Animal(_data)
{
color = _color;
}
//more code
};