C ++虚函数无法识别

时间:2012-06-03 17:59:58

标签: c++ class virtual override

我正在使用CodeBlocks,我有以下不编译的代码。

(这是关于一些C ++的陷阱,所以我唯一要问的是为什么它不能编译)

代码如下:

#include <iostream>
using namespace std;

class Shape
{
        public:
                Shape();
                virtual void reset();
        private:
                int color;
};

class Point : public Shape
{
        private:
        double a,b;
};

void Shape::reset()
{
        cout<<"Shape reset\n";
}

void Point::reset()
{
        Shape::reset();
        cout<<"Point reset";
}

Shape::Shape()
{
        reset();
}

int main()
{
        Shape s;
        Point o;
}

我收到以下错误:

no `void Point::reset()' member function declared in class `Point'

2 个答案:

答案 0 :(得分:6)

您需要向Point班级主体添加该函数的声明:

class Point : public Shape
{
public:
    virtual void reset();
private:
    double a,b;
};

virtual是不必要的,因为它在基类中声明为virtual。但将它添加为提醒会很有帮助。)

答案 1 :(得分:0)

应该这样声明:

class Shape
{
       public:
               Shape();
               virtual void reset(){};
       private:
               int color;
};

注意括号,因为虚函数什么都不做,你可以在声明中添加括号。由于它是一个虚函数,因此在继承基类时可以重新定义。因此无法真正调用Shape::reset()函数中的Point::reset()。同样在您的Point课程中,您需要重新定义新功能。像这样:

class Point : public Shape
{
     public:
         void reset();
}

然后您可以将该功能用作Point::reset