错误:无法声明变量' c'为抽象类型' circle'

时间:2011-11-30 02:20:39

标签: c++

有谁知道我做错了什么并向我解释为什么它不会让我宣布任何一个圆圈? 主

int main(void){
...
    circle c;
...
}

circle.h

#include <string>
#include <iostream>
using namespace std;

class circle : public shape {

    double diameter, circum, radius;

public:

    virtual void draw(){
        cout<< "Circle"<< endl;
    }
};

shape.h

#include <string>
#include <iostream>

using namespace std;

class shape{

public:
    virtual void draw() const = 0;
};

4 个答案:

答案 0 :(得分:8)

virtual void draw() const { 
    cout<< "Circle"<< endl; 
} 

您应该在上面的示例中添加关键字const。

答案 1 :(得分:4)

shape类中的draw函数声明为const,而circle类中的draw函数则不是。因此,圆圈中的那个不会覆盖形状中的那个。所以它仍然是抽象的,因为它没有覆盖纯虚函数。

答案 2 :(得分:2)

在圆圈定义绘图后,你错过了一个const。

virtual void draw() const { cout<<"Circle"<<endl; }

使用抽象函数时,函数prototype / signature必须匹配-exactly -

编辑:Blegh,殴打30秒。

答案 3 :(得分:-1)

如果您懒得查看编译器输出,则会显示以下内容:

g++ main.cpp
main.cpp: In function ‘int main()’:
main.cpp:5:12: error: cannot declare variable ‘c’ to be of abstract type ‘circle’
circle.h:6:29: note:   because the following virtual functions are pure within ‘circle’:
shape.h:9:18: note:     virtual void shape::draw() const