覆盖'virtual void'c ++错误

Sal*_*lah 0 c++ virtual-functions

以下代码给我一个错误。

错误:覆盖了'virtual void Animal :: getClass()',其中说virtual void getClass(){cout <<“我是动物” << endl; }

错误:为'virtual int Dog :: getClass()'指定的返回类型冲突,它说getClass(){cout <<“我是狗” << endl; }

另外,它说:

“狗”类具有虚拟方法“ getClass”,但非虚拟析构函数

#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;
}
Run Code Online (Sandbox Code Playgroud)

Joc*_*ler 6

将类Dog中的定义更改为:

void getClass() { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

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

  • C ++标准甚至不支持默认的“ int”返回类型(C中已弃用),并且应该在每个现代编译器中给出有关丢失(返回)类型的警告/错误。 (3认同)