ОБСУЖДЕНИЕ

Ошибка "cannot Instantiate Abstract Class"

2 ответов 10 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

Статус
Закрыто для дальнейших ответов.
Автор темы
Помогите пожалуйста отладить код, не могу разобраться, почему когда я создаю объект класса Sqr, который является наследником класса Poly, компиллятор ругается "cannot instantiate abstract class":

void Shapes::Add(const Poly &P)
{
if(P.name=="Квадрат")
tmp->poly=new Sqr(P);
}

Вот описание классов:

struct Pair
{
Point p;
Pair * next;
};

class Poly
{
protected:
Pair *ptr; // список точек
string name;
public:
Poly(){ptr=NULL; name="";};
Poly(const Poly&);
void Show();
double Perimetr();
virtual double Square()=0;
friend struct Shapes;
};

class Sqr: public Poly
{
public:
Sqr(){ptr=NULL; name="Квадрат";};
double Square() const;
};

Заранее благодарен.
 
double Square() const; а в оригинале не const
 
Походу это из-за полностью виртуального Square. Ты наследуешь Poly и не задаешьникакой реализации функции => она у тебя и в Sqr чисто виртуальная. А любой класс в котором есть хоть один чисто виртуальный метод С++ считает абстрактным. Короче задай реализацию и заработает
 
Статус
Закрыто для дальнейших ответов.