2015-11-19 86 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 */ }