gpt4 book ai didi

c++ - 覆盖 'virtual void ' C++ 错误

转载 作者:太空宇宙 更新时间:2023-11-04 15:01:45 24 4
gpt4 key购买 nike

下面的代码给我一个错误。

Error: overriding 'virtual void Animal::getClass()', where it says virtual void getClass() { cout << "I'm an animal" << endl; }

Error: conflicting return type specified for 'virtual int Dog::getClass()', where it says getClass(){ cout << "I'm a dog" << endl; }

另外,它说:

Class 'Dog' has virtual method 'getClass' but non-virtual destructor

#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include<sstream>
#include <stdlib.h> // srand, rand
#include <stdio.h>

using namespace std;

class Animal{

public:
void getFamily(){ cout << "We are animals " << endl;}

virtual void getClass() { cout << "I'm an animal" << endl; }
};

class Dog : public Animal{

public:
getClass(){ cout << "I'm a dog" << endl; }

};

void whatClassAreYou(Animal *animal){

animal -> getClass();

}

int main(){

Animal *animal = new Animal;
Dog *dog = new Dog;

animal->getClass();
dog->getClass();

whatClassAreYou(animal);
whatClassAreYou(dog);


return 0;
}

最佳答案

将 Dog 类中的定义更改为:

void getClass() { /* ... */ }

当您声明它时没有返回类型,编译器会将返回类型设置为 int。这会产生错误,因为被覆盖的方法必须具有与其覆盖的基类方法相同的返回类型。

关于c++ - 覆盖 'virtual void ' C++ 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34803451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com