函数 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

};