在Shape.hpp中:
class Shape {
public:
char c;
virtual void paint();
...
};
在Triangle.hpp中:
#include "Shape.hpp"
class Triangle : public Shape {
...
};
在Triangle.cpp中:
...
void Triangle::paint() {
...
}
...
编译时:
error: class ‘Triangle’ does not have any field named ‘c’
error: no ‘void Triangle::paint()’ member function declared in class ‘Triangle’
我不明白为什么Triangle没有其父类Shape的字段和成员函数。如何解决这个问题?
答案 0 :(得分:6)
您还需要在paint()
中声明Triangle
成员函数:
class Triangle : public Shape
{
public:
void paint() override;
};
答案 1 :(得分:2)
派生类中也需要声明覆盖函数:
class Triangle : public Shape
{
public:
void paint();
};
可选地,在C ++ 11中,您可以更明确地使用:
class Triangle : public Shape
{
public:
void paint() override;
};
然后编译器也知道它是一个覆盖,所以可以“检查”你没有改变/添加你认为是覆盖的新函数。