2014-02-25 115 views
1

在Shape.hpp:C++为什么继承不起作用?

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’ 

我做不明白为什么Tr iangle没有其父类Shape的字段和成员函数。这怎么解决?

+1

你从来没有在'Triangle'中声明任何'paint'函数。任何C++多态资源都应该有很好的工作示例。 – chris

+0

您的'类Triangle'定义在右大括号后缺少';'。 – pmr

+0

@pmr这只是一个错误,而不是在代码中。现在已经修复了。 – user2460978

回答

6

您需要声明paint()成员函数中Triangle太:需要

class Triangle : public Shape 
{ 
public: 
    void paint() override; 
}; 
+2

+1。 –

+0

确实,这解决了成员函数的问题。怎么样的领域? – user2460978

+1

@ user2460978您应该发布一些代码来重现'c'问题。 – juanchopanza

2

覆盖函数的声明在派生类中太:

class Triangle : public Shape 
{ 
public: 
    void paint(); 
}; 

可选,在C++ 11可以更明确:

class Triangle : public Shape 
{ 
public: 
    void paint() override; 
}; 

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