Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
 Аватар для Оксана 1234
4 / 4 / 3
Регистрация: 10.04.2013
Сообщений: 172

error C2259: number_of_plants: невозможно создать экземпляр абстрактного класса

04.11.2013, 23:27. Показов 2245. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
error C2259: number_of_plants: невозможно создать экземпляр абстрактного класса
Пожалуйста, помогите

main
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "flower.h"
#include <fstream>
#include <sstream>
#include <string>
#include <algorithm>
#include <iostream>
#include <iterator>
#include <cctype>
FILE*uf;
 
using namespace std;
 
void main()
{
 plants* a_1r;
 number_of_plants a_5;
one_year a_2("Trava","Roslunu");
many_year a_3("Derevo","Roslunu");
 
cout<<"Name:"<<a_2.name<<" One_year:"<<a_2.one_year_plant<<endl;
cout<<"Name:"<<a_3.name<<" One_year:"<<a_3.many_year_plant<<endl;
 
cout<<" Robota polimorfizmy\n";
 
a_1r=&a_2;
a_1r->vuvid_name();
a_1r->func();
 
a_1r=&a_3;
a_1r->vuvid_name();
a_1r->func();
 
 
cout<<"Number_of_plants:"<<a_5.number_plant<<endl;
 
cout<<endl;
 
}
flower
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#ifndef flower_h_
#define flower_h_
 
 
#include<iostream>
#include <string>
using namespace std;
 
class plants
{public:
    char*name;
    plants(char*d)
    { int l=strlen(d)+1;
        name=new char[l];
        if(! name)
        {cout<<"Pomulka dostypy\n";
            exit(1);}
        strcpy(name,d);
    }
    plants()
    { char*name1=new char[];
    name1="Romashka";
        if(! name1)
        {cout<<"Pomulka dostypy\n";
            exit(1);}
    }
    
virtual ~plants(){delete []name;}
virtual void vuvid_name(){cout<<"Name "<<name;}
virtual void func()=0;
 
};
 
class one_year:public plants
{public:
char*one_year_plant;
 
one_year(char*d, char*s):plants(s)
        { int l=strlen(d)+1;
        one_year_plant=new char[l];
            if(! one_year_plant)
            {cout<<"Pomulka dostypy\n";
            exit(1);}
        strcpy(one_year_plant,d);}
    
virtual ~one_year(){delete []one_year_plant;}
void vuvid_name(){ cout<<"\nName "<<name;};
void func() {cout<<"\nVukonannia f-ii klasy one_year\n";}
 
};
 
class many_year:public plants
{public:
char*many_year_plant;
many_year(char*d,char*s):plants(s)
        { int l=strlen(d)+1;
        many_year_plant=new char[l];
            if(! many_year_plant)
            {cout<<"Pomulka dostypy\n";
            exit(1);}
        strcpy(many_year_plant,d);}
virtual ~many_year(){delete []many_year_plant;}
void vuvid_name(){ cout<<"\nName "<<name;};
 void func() {cout<<"\nVukonannia f-ii klasy many_year\n";}
 
};
 
class number_of_plants:public plants
{public:
    int number_plant;
    number_of_plants(){number_plant=9;};
};
 
#endif
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.11.2013, 23:27
Ответы с готовыми решениями:

error C2259: last: невозможно создать экземпляр абстрактного класса
Только начала изучать абстрактные классы, и сразу же проблемы. error C2259: last: невозможно создать экземпляр абстрактного класса. Не знаю...

как исправить Ошибка 8 error C2259: Tabl: невозможно создать экземпляр абстрактного класса
имеется абстрактный класс, у нее есть 4 виртуальных функций: запись и чтение с помощью С и С++ имеется класс Tabl производный от...

Невозможно создать экземпляр абстрактного класса
Делаю курсовик, сейчас на начальной стадии (а как же еще к концу сессии :D). Код, который я сейчас покажу еще &quot;сырой&quot;, а точнее...

25
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,859
04.11.2013, 23:41
Цитата Сообщение от Оксана 1234 Посмотреть сообщение
void func() {cout<<"\nVukonannia f-ii klasy many_year\n";}
вот здесь попробуй virtual добавить
на вскидку ошибок не вижу
и как ведут себя наследники с виртуальной функцией не могу точно сказать
по моему нужно явно объявлять виртуальную
2
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
04.11.2013, 23:51
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class plants
{
//...
virtual ~plants(){delete []name;}
virtual void vuvid_name(){cout<<"Name "<<name;}
virtual void func()=0;//Чисто виртуальная функция
//...
};
 
class number_of_plants:public plants //Наследуете абстрактный класс
{public: 
     int number_plant; 
     number_of_plants(){number_plant=9;}; 
//Где реализация func?
};
 
void main()
{
 plants* a_1r;
 number_of_plants a_5; //Пытаетесь создать экземпляр абстрактроно класса
//...
}
Нет реализации func в классе number_of_plants, поэтому класс тоже абстрактный
2
 Аватар для Оксана 1234
4 / 4 / 3
Регистрация: 10.04.2013
Сообщений: 172
04.11.2013, 23:51  [ТС]
C++
1
virtual void func() {cout<<"\nVukonannia f-ii klasy number_of_plants\n";}
Я добавила эту строку в ф-ию number_of_plants программа роботает, но сразу же после
Цитата Сообщение от Оксана 1234 Посмотреть сообщение
cout<<"Number_of_plants:"<<a_5.number_pl ant<<endl;
программа тупит
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,859
04.11.2013, 23:57
Цитата Сообщение от Croessmah Посмотреть сообщение
Нет реализации func в классе number_of_plants, поэтому класс тоже абстрактный
точно
а я не заметил
смотрел, смотрел, не пропустила ли где реализацию, и просмотрел
1
 Аватар для Оксана 1234
4 / 4 / 3
Регистрация: 10.04.2013
Сообщений: 172
05.11.2013, 00:00  [ТС]
Пожалуйста, помоги программа все равно виснет
0
30 / 30 / 9
Регистрация: 01.11.2013
Сообщений: 63
05.11.2013, 00:00
Цитата Сообщение от Оксана 1234 Посмотреть сообщение
C++
1
virtual void func() {cout<<"\nVukonannia f-ii klasy number_of_plants\n";}
Я добавила эту строку в ф-ию number_of_plants программа роботает, но сразу же после
программа тупит
В конце допишите
C++
1
2
system("pause");
exit(1);
1
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,859
05.11.2013, 00:04
Цитата Сообщение от Оксана 1234 Посмотреть сообщение
программа тупит
а в чем тупость выражается? на экран не выводит

Добавлено через 2 минуты
Цитата Сообщение от Оксана 1234 Посмотреть сообщение
char*name1=new char[];
* * name1="Romashka";
чей то вот это у меня сомнения вызывает
используй strcpy
http://ru.wikipedia.org/wiki/Strcpy
1
05.11.2013, 00:05

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
смотрел, смотрел, не пропустила ли где реализацию, и просмотрел
Да при таком форматировании без бутылки не разобраться :D

2
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,859
05.11.2013, 00:13
ты выделила память потом указателю присвоила адрес константной строки
на выделенную память уже никто не указывает
потом в деструкторе
Цитата Сообщение от Оксана 1234 Посмотреть сообщение
virtual ~one_year(){delete []one_year_plant;}
удаляешь не выделенную память а константную строку

Добавлено через 6 минут
Цитата Сообщение от Оксана 1234 Посмотреть сообщение
one_year_plant=new char[l];
* * * * * * if(! one_year_plant)
* * * * * * {cout<<"Pomulka dostypy\n";
* * * * * * exit(1);}
* * * * strcpy(one_year_plant,d);}
во первых
указатели проверять на 0 бессмысленно. это не malloc
лови исключения
во вторых не обзывай переменные малой буквой L, очень похожа на единицу, легко ошибится
1
 Аватар для Оксана 1234
4 / 4 / 3
Регистрация: 10.04.2013
Сообщений: 172
05.11.2013, 00:18  [ТС]
А как тогда проверить выделена ли память?
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,859
05.11.2013, 00:25
Цитата Сообщение от Оксана 1234 Посмотреть сообщение
А как тогда проверить выделена ли память?
если память не выделится то new кинет исключение и если ты его не обработаешь, то исключение дойдет до самого верха и программа рухнет
так что считай что память выделится всегда
2
 Аватар для Оксана 1234
4 / 4 / 3
Регистрация: 10.04.2013
Сообщений: 172
05.11.2013, 00:29  [ТС]
Пожалуйста, скажите как в деструкторе тогда удалить many_year_plant

Добавлено через 3 минуты
Кстати я сейчас пересмотрела в книге и там проводится такая проверка
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,859
05.11.2013, 00:35
Цитата Сообщение от Оксана 1234 Посмотреть сообщение
скажите как в деструкторе тогда удалить many_year_plant
тебе конструктор надо поменять

Цитата Сообщение от Оксана 1234 Посмотреть сообщение
C++
1
2
3
4
5
6
7
plants()
   { char*name1=new char[];
 name1="Romashka";
 if(! name1)
   {cout<<"Pomulka dostypy\n";
   exit(1);}
  }
например так
C++
1
2
3
4
5
plants()
{
char*name1=new char[10];
strcpy(name1,"Romashka");
 }
Добавлено через 1 минуту
Цитата Сообщение от Оксана 1234 Посмотреть сообщение
Кстати я сейчас пересмотрела в книге и там проводится такая проверка
глупо
это еще идет с Си с malloc
попробуй выдели пару гигабайт и посмотри сработает твой if или нет

Добавлено через 3 минуты
Видишь ли new кроме выделения памяти еще вызывает конструкторы
и если память не выделилась то конструктор вызовется или нет? продолжать программу или падать? вот для этого и сделаны исключения
сейчас попробую тебе статейку найти
1
 Аватар для Оксана 1234
4 / 4 / 3
Регистрация: 10.04.2013
Сообщений: 172
05.11.2013, 00:37  [ТС]
А здесь все нормально или нет?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class many_year:public plants
{public:
char*many_year_plant;
many_year(char*d,char*s):plants(s)
        { int l=strlen(d)+1;
        many_year_plant=new char[l];
        
        strcpy(many_year_plant,d);}
virtual ~many_year(){delete []many_year_plant;}
void vuvid_name(){ cout<<"\nName "<<name;};
virtual void func() {cout<<"\nVukonannia f-ii klasy many_year\n";}
 
};
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,859
05.11.2013, 00:46
Цитата Сообщение от Оксана 1234 Посмотреть сообщение
Кстати я сейчас пересмотрела в книге и там проводится такая проверка
книга какого года?
дело в том что когда то давно-давно new действительно возвращал NULL
но эти времена давно прошли
вот что пишет википедия
Однако, если new не может выделить память в куче, то он передаст (throw) исключение типа std::bad_alloc. Это устраняет необходимость явной проверки результата выделения.
http://ru.wikipedia.org/wiki/New_(C%2B%2B)
а вот здесь рассказывается почему и как
http://www.e-reading.biz/chapt... e_CPP.html
1
 Аватар для Оксана 1234
4 / 4 / 3
Регистрация: 10.04.2013
Сообщений: 172
05.11.2013, 00:49  [ТС]
Герберт Шилдт - Самоучитель C++
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,859
05.11.2013, 00:50
Цитата Сообщение от Оксана 1234 Посмотреть сообщение
А здесь все нормально или нет?
ну как тебе сказать?
криминала не вижу.
может плохо смотрю
кроме буквы Л которую я принял за 1 и хотел спросить хватит ли тебе одного байта под строку
но потом присмотрелся и понял что не прав

Добавлено через 1 минуту
Цитата Сообщение от Оксана 1234 Посмотреть сообщение
Герберт Шилдт - Самоучитель C++
год то какой?
может перепечатка старого?
странно что Шилдт такие вещи пропагандирует
1
 Аватар для Оксана 1234
4 / 4 / 3
Регистрация: 10.04.2013
Сообщений: 172
05.11.2013, 00:55  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
Видишь ли new кроме выделения памяти еще вызывает конструкторы
и если память не выделилась то конструктор вызовется или нет? продолжать программу или падать? вот для этого и сделаны исключения
сейчас попробую тебе статейку найти
new вызывает деструкторы?

Добавлено через 3 минуты
Я просто не совсем поняла мы ж в конструкторе вызываем new , как после этого new вызывает конструктор
2006 год переиздание в Питере
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,859
05.11.2013, 01:03
Цитата Сообщение от Оксана 1234 Посмотреть сообщение
new вызывает деструкторы?
Я где то такое сказал?
я говорил конструкторы
деструкторы вызывает delete
кстати еще аргумент против проверки
если new действительно вернет NULL то следующей строчкой программа упадет "ошибка доступа", а она у тебя и так падает exit(1);
смысл загромождать код?

Добавлено через 1 минуту
Цитата Сообщение от Оксана 1234 Посмотреть сообщение
как после этого new вызывает конструктор
new вызывает конструктор того подо что выделяет память в данном случае конструктор char

Добавлено через 4 минуты
Цитата Сообщение от Оксана 1234 Посмотреть сообщение
2006 год переиздание в Питере
а там нет такого "издание стереотипное" или "издается по изданию такого то года"
кстати у "ПитерПресс" обычно два титульных листа слева издание с которого переводили
не верится мне
Цитата Сообщение от ValeryS Посмотреть сообщение
что Шилдт такие вещи пропагандирует
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.11.2013, 01:03
Помогаю со студенческими работами здесь

Невозможно создать экземпляр абстрактного класса
work.cpp #include &quot;student.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;windows.h&gt; #include...

Не получается создать экземпляр абстрактного класса
в общем я очень тупой, буду благодарен за умные советы, имеется класс object и наследуемые от него triangle и uravn вот фрагмент из мэйна ...

Ошибка: невозможно создать объект абстрактного класса
программа для заменны слова в файле, на введенное с клавы слово!реализовать нужно через интерфейс! ошибка в строчке Text edit; не...

Ошибка: Невозможно создать экземпляр абстрактного класса
class Program { static void Main(string args) { List&lt;Prog&gt; listSoft = new List&lt;Prog&gt;(); //массив...

Невозможно создать экземпляр абстрактного класса или интерфейса
using System.Windows.Media.Imaging; using System.Drawing; Есть эти две библиотеки, нужно создать ,ругается на подчеркнутый image ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru