С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Оксана 1234
4 / 4 / 0
Регистрация: 10.04.2013
Сообщений: 172
#1

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

04.11.2013, 23:27. Просмотров 940. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2013, 23:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос error C2259: number_of_plants: невозможно создать экземпляр абстрактного класса (C++):

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

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

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

Невозможно создать экземпляр абстрактного класса - C++
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...

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

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

25
ValeryS
Модератор
6729 / 5138 / 485
Регистрация: 14.02.2011
Сообщений: 17,246
05.11.2013, 00:46 #16
Цитата Сообщение от Оксана 1234 Посмотреть сообщение
Кстати я сейчас пересмотрела в книге и там проводится такая проверка
книга какого года?
дело в том что когда то давно-давно new действительно возвращал NULL
но эти времена давно прошли
вот что пишет википедия
Однако, если new не может выделить память в куче, то он передаст (throw) исключение типа std::bad_alloc. Это устраняет необходимость явной проверки результата выделения.
http://ru.wikipedia.org/wiki/New_(C%2B%2B)
а вот здесь рассказывается почему и как
http://www.e-reading.biz/chapter.php...vanie_CPP.html
1
Оксана 1234
4 / 4 / 0
Регистрация: 10.04.2013
Сообщений: 172
05.11.2013, 00:49  [ТС] #17
Герберт Шилдт - Самоучитель C++
0
ValeryS
Модератор
6729 / 5138 / 485
Регистрация: 14.02.2011
Сообщений: 17,246
05.11.2013, 00:50 #18
Цитата Сообщение от Оксана 1234 Посмотреть сообщение
А здесь все нормально или нет?
ну как тебе сказать?
криминала не вижу.
может плохо смотрю
кроме буквы Л которую я принял за 1 и хотел спросить хватит ли тебе одного байта под строку
но потом присмотрелся и понял что не прав

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

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

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

Добавлено через 4 минуты
Цитата Сообщение от Оксана 1234 Посмотреть сообщение
2006 год переиздание в Питере
а там нет такого "издание стереотипное" или "издается по изданию такого то года"
кстати у "ПитерПресс" обычно два титульных листа слева издание с которого переводили
не верится мне
Цитата Сообщение от ValeryS Посмотреть сообщение
что Шилдт такие вещи пропагандирует
1
Оксана 1234
4 / 4 / 0
Регистрация: 10.04.2013
Сообщений: 172
05.11.2013, 01:08  [ТС] #21
Может быть, просто у меня електронная версия , не могу проверить

Добавлено через 51 секунду
Спасибо, что вы потратили свое время, и не сказали, что я сама все должна понять. Благодаря вам я поняла много вещей з С++, которые я как-то з горем пополам делала, но не понимала их сути. Спасибо, что вы такой есть.
0
ValeryS
Модератор
6729 / 5138 / 485
Регистрация: 14.02.2011
Сообщений: 17,246
05.11.2013, 01:11 #22
Цитата Сообщение от Оксана 1234 Посмотреть сообщение
Спасибо, что вы такой есть
как там по украински
Нема за що
1
Оксана 1234
4 / 4 / 0
Регистрация: 10.04.2013
Сообщений: 172
05.11.2013, 01:20  [ТС] #23
Я так сильно с ошыбкамы пишу, что вы поняли, что я говорю по-украински?

Добавлено через 6 минут
Извините, я наверное уже в печенках сижу, вопрос не по-теме, у меня почему-то visual студио не работает, когда работает антивируска, вирусов нет я проверяла. Пишет подозрительный файл блокирован.
0
ValeryS
Модератор
6729 / 5138 / 485
Регистрация: 14.02.2011
Сообщений: 17,246
05.11.2013, 01:29 #24
Цитата Сообщение от Оксана 1234 Посмотреть сообщение
Я так сильно с ошыбкамы пишу, что вы поняли, что я говорю по-украински?
не а
в аватарке адрес посмотрел

ну в качестве "аловерды" хоче сказать что приятно помогать людям, которые сами что то сделали и произошел "затык" у всех бывает, вместе разберемся
это не "Дан одномерный массив, вывести на экран. Спасибо"
на таких я даже время не трачу, человек не хочет учится
как кто-то сказал(дословно не помню)
когда человек сказал: "Дай!" это еще не человек
А когда сказал: "Почему?" это уже Человек

Добавлено через 3 минуты
Цитата Сообщение от Оксана 1234 Посмотреть сообщение
у меня почему-то visual студио не работает, когда работает антивируска, вирусов нет я проверяла. Пишет подозрительный файл блокирован.
бывает такое с некоторыми антивирусами, решения не знаю
в исключения включить студию?
с этим вопросом лучше к антивирусникам в их ветку
у меня стоит Майкросовтовская MSE и плюс AnVir чтобы за процессами наблюдать самому
таких проблем нет
2
Оксана 1234
4 / 4 / 0
Регистрация: 10.04.2013
Сообщений: 172
05.11.2013, 01:35  [ТС] #25
Антивирус можно и потерпеть. Не беда.
Спасибо, вам еще раз побольше бы таких как вы!
Приятно было познакомиться!
Спокойной ночи!!!
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6513 / 3150 / 309
Регистрация: 04.12.2011
Сообщений: 8,720
Записей в блоге: 5
05.11.2013, 03:04 #26
ValeryS, Оксана 1234, не ругайте, что вмешиваюсь, но уж очень хочется поучаствовать. Вспомнил одну страшилку и решил рассказать на ночь хорошим людям.
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
75
76
77
78
79
80
81
82
83
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
 
class AbstrClass{
public://здесь и далее для простоты всё открыто
AbstrClass(const char *someCh){
c_str=0;//это вместо bad_alloc, но чтобы ноль где-то взять его нужно туда положить) 
c_str=new (std::nothrow) char[strlen(someCh)+1];//если new не выделит память то c_str будет 0
 
//c_str=new (std::nothrow) char[strlen(someCh+1)]; //коментарий смотрите ниже main(){}
//если хотите увидеть как это глючит заремьте правильную и разремьте закомментированную строчку
 
if(c_str)
strcpy(c_str, someCh);
else{
cout<<"Memory has gone to bed! Good night to all of you."<<endl;
system("pause");
exit(1);
}
    }
virtual~AbstrClass(){
if(c_str){
cout<<"Destr_Base with c_str : "<<c_str<<endl;
system("pause");    
    delete []c_str;
}
    }
 
virtual void foo()=0;
char *c_str;
};
class ChildOne :public AbstrClass
{
    public:
ChildOne(const char *someCh)
:AbstrClass(someCh)
{}
//~ChildOne(){};//нет необходимости, т.к. делать ему нечего, а базовый вызовется автоматически
virtual void foo(){cout<<"one foo! "<<c_str<<endl;}
};
 
class ChildNextOne :public AbstrClass
{
    public:
ChildNextOne(const char *someCh)
:AbstrClass(someCh)
{}
//~ChildNextOne(){}//
virtual void foo(){cout<<"the nextone foo! "<<c_str<<endl;}
};
 
int main(){
SetConsoleCP (1251); SetConsoleOutputCP (1251);
AbstrClass *ptr_Base[2]={0};
ChildOne one_ch("One");
ChildNextOne nextone_ch("Nextone");
ptr_Base[0]= &one_ch;
ptr_Base[1]= &nextone_ch;
 
for(int i=0; i<2; ++i){
    ptr_Base[i]->foo();
    }
 
cout<<endl;
system("pause");
return 0;
}
/*
//СТРАШНАЯ шутка для маленькой девочки на ночь:
вот нормальная строка:
c_str=new (std::nothrow) char[strlen(someCh)+1];
 
если эту строку по неосторожности написать:
c_str=new (std::nothrow) char[strlen(someCh+1)];
то компилятор это скушает! Это потому что указатели поддерживают адресную арифметику
и указатель сложенный с целым числом (единицей в данном случае) даст в результате указатель)))
 
Но strlen получит указатель на строку начиная с первого, а не нулевого символа,
поэтому память будет выделена неверно и неверно будет освобождаться!
Найти такую глупость труднее чем сотворить. :)
*/
Хотя конечно, устанавливать и сбрасывать указатели, использовать new без исключения ... может и муторно.
2
05.11.2013, 03:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2013, 03:04
Привет! Вот еще темы с ответами:

Error LNK2001. Создание абстрактного класса - C++
Задание: Создать абстрактный базовый класс Pair с виртуальными арифметическими операциями. Создать производные классы Money и Fraction; ...

Не могу создать дочку абстрактного класса - C++
Следующий код на MS Visual C++ 2010 даёт ошибку error C2259: 'IntValue' : cannot instantiate abstract class: #include &lt;iostream&gt; ...

Создать экземпляр класса без явного указания членов класса - C++
Если у меня есть два конструктора, один из которых по умолчанию, а второй явный. Я почему-то не могу создать экземпляр класса без явного...

Создать новый объект-наследник абстрактного класса - C++
Приветствую, друзья! У нас есть абстрактный класс AbstractClass и его наследники child1 и child2. В массиве у нас есть несколько...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.