C ++为什么继承不起作用?

时间:2014-02-25 16:45:46

标签: c++ inheritance

在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的字段和成员函数。如何解决这个问题?

2 个答案:

答案 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;
};

然后编译器也知道它是一个覆盖,所以可以“检查”你没有改变/添加你认为是覆盖的新函数。