2015-11-19 65 views
0

这是我的基类:对象是不允许

class Shape{ 
public: 
Shape(){} 
virtual double computeArea()=0; 
virtual void expand(int f)=0' 
virtual void display()=0; 
} 

这是我的子类:

class Rectangle : public Shape{ 
protected: 
double width; 
double height; 
public: 
Rectangle(){width = 0; length = 0;} 
Rectangle(double w, double l){width = w; length = l} 

double computeArea(){//code} 
void expand(int f){//code} 
void display(){//code} 
} 

然后,在主我试着这样做:

Shape * s = new Rectangle(); 

而且我不断收到“抽象类类型的对象”不允许使用“矩形” 我很舒服我超载了功能正确...请帮助。

+0

矩形(double w,double l){width = w;长度= 1} 缺少';'在长度= 1 – DBug

+0

和0'之后应该是0; –

+0

此外,virtual void expand(int f)= 0',将单引号替换为'/';' – DBug

回答

0

如果我们无法确定您是否提供了确切的代码,那么我们无法提供帮助。因为我看到至少有这里有两个语法错误,它们会拒绝编译WELL BEFORE有关类缺少vtable的警告。

virtual void expand(int f)=0' // <- this ' should be a ; 

void expand(int f){//code}这里也没有收}。所以这使得无法诊断你的问题。

消息“抽象类型Rectangle的对象现在被允许”意味着确保一个纯虚方法未在Rectangle类overidden。现在,如果发生这种情况是因为签名不同,或者花括号不平衡或者您可能介绍的其他任何奇怪的语法问题,我们都无法知道。

我能给出的唯一建议是在方法声明后添加override关键字Rectangle强制验证正确的覆盖,并有一个更详细的错误消息。例如:

void expand(int f) override { /* code */ }