Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2010, 16:29   #1
kostyan777
 
Регистрация: 11.06.2010
Сообщений: 5
По умолчанию Ошибка "cannot instantiate abstract class"

Помогите пожалуйста отладить код, не могу разобраться, почему когда я создаю объект класса 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;
};
Заранее благодарен.

Последний раз редактировалось MaTBeu; 11.06.2010 в 16:58.
kostyan777 вне форума Ответить с цитированием
Старый 11.06.2010, 16:36   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Poly - абстрактный класс. Поэтому нельзя создавать объекты этого класса, в частности, передавать их в качестве аргументов (если только по указателю).
И используйте тег CODE!
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 11.06.2010, 16:41   #3
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Код:
virtual double Square()=0;
Код:
double Square() const;
различные функции. неконстантная чисто виртуальная не реализована
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 18.06.2010, 14:25   #4
kostyan777
 
Регистрация: 11.06.2010
Сообщений: 5
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
Код:
virtual double Square()=0;
Код:
double Square() const;
различные функции. неконстантная чисто виртуальная не реализована
Функцию double Square() я реализовал в файле-сппшнике, поэтому с этим все норм.

double Sqr::Square() const
{
return 3*(ptr->p-=ptr->next->p);
}
kostyan777 вне форума Ответить с цитированием
Старый 18.06.2010, 17:59   #5
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Цитата:
Сообщение от kostyan777 Посмотреть сообщение
Функцию double Square() я реализовал в файле-сппшнике, поэтому с этим все норм.

double Sqr::Square() const
{
return 3*(ptr->p-=ptr->next->p);
}
Не норм. Прототипы разные.
Carbon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка " Record, object or class type required " (Запись, объектный или классический тип требовались) kta87 Помощь студентам 2 28.02.2010 10:04
классы вида for="..." и class="A B C" Darkstar100 HTML и CSS 5 19.01.2010 20:06
Ошибка "expected class-name before '(' token" Myuji Общие вопросы C/C++ 2 15.12.2009 18:00
Ошибка при использовании OlePropertyGet("Documents").OleProcedure("Add") в C++ Builder AleksP C++ Builder 7 11.04.2009 13:06
Ошибка:"Project raised exception class EConvertError..." Gambit90 Помощь студентам 6 14.01.2009 14:12