0

我正在使用 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'
4

2 回答 2

6

您需要在Point类主体中添加函数声明:

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

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

于 2012-06-03T18:01:22.287 回答
0

它应该这样声明:

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

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

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

然后你可以使用函数 as Point::reset

于 2012-06-03T18:20:26.690 回答