2015-11-19 2 views
0

Это мой базовый класс:объекта абстрактного типа класса Rectangle не допускаются

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} 
} 

Затем в основном я пытаюсь сделать это:

И я продолжаю получать «объект абстрактного типа класса« Прямоугольник »не допускается» Я довольно уверен, что я перегружаю функции правы ... Пожалуйста, помогите.

+0

Rectangle (double w, double l) {width = w; length = l} отсутствует ';' после длины = 1 – DBug

+0

и 0 'должно быть 0; –

+0

Кроме того, виртуальный void expand (int f) = 0 ', заменить одиночную кавычку w /'; ' – DBug

ответ

0

Мы не можем помочь, если не можем быть уверены, что вы предоставляете точный код. Так как я вижу не менее, здесь присутствуют две ошибки синтаксиса, которые отвергли бы компиляцию WELL BEFORE предупреждение о недостающей таблице vtable для класса.

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

и void expand(int f){//code} здесь нет закрытия }. Таким образом, это не позволяет диагностировать вашу проблему.

сообщение «объект абстрактного класса типа Rectangle теперь разрешено» подразумевает наверняка, что чистый виртуальный метод не overidden в Rectangle классе. Теперь, если это происходит из-за того, что подпись отличается, или скобки не сбалансированы или что-то еще странное синтаксическое значение, которое вы могли бы ввести, мы не можем знать.

Единственное, что я могу дать, это добавить ключевое слово override после объявления метода в Rectangle, чтобы подтвердить правильность переопределения и получить более подробное сообщение об ошибке. Например:

void expand(int f) override { /* code */ } 
Смежные вопросы