Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/64: Рейтинг темы: голосов - 64, средняя оценка - 4.73
0 / 0 / 1
Регистрация: 04.12.2014
Сообщений: 143

Для класса не существует конструктор по умолчанию

26.11.2018, 16:26. Показов 14073. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ошибка (активно) E0291 для класса "Apteka" не существует конструктор по умолчанию
Хотел посмотреть что у меня получается, а он ошибку выводит. Помогите написать класс по умолчанию. (Потом все string будут массивами)

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
84
85
86
87
88
89
#include <iostream>
#include <ctime>
#include <string>
using namespace std;
 
class Date
{
    const int oneday = 0x15180;
    int day1, month1, year1;
    int day2, month2, year2;
    string name;
    string quantity;
    string price;
public:
    void FirstDate()
    {
        cout << "Введите первую дату:\n\tВведите число: ";
        cin >> day1;
        cout << "\tВведите месяц: ";
        cin >> month1;
        cout << "\tВведите год: ";
        cin >> year1;
    }
    void SecondDate()
    {
        cout << "Введите вторую дату:\n\tВведите число: ";
        cin >> day2;
        cout << "\tВведите месяц: ";
        cin >> month2;
        cout << "\tВведите год: ";
        cin >> year2;
    }
    void diff()
    {
        tm FirstDate = { 0, 0, 0, day1, month1 - 1, year1 - 0x76C, 0, 0, 0 };
        tm SecondDate = { 0, 0, 0, day2, month2 - 1, year2 - 0x76C, 0, 0, 0 };
        time_t t1 = mktime(&FirstDate);
        time_t t2 = mktime(&SecondDate);
        time_t diff = ((t1 > t2) ? t1 - t2 : t2 - t1) / oneday;
        cout << "\nДней между датами: " << diff << '\n';
    }
};
 
class Apteka:Date
{
    string name;
    string quantity;
    string price;
    public:
    Apteka(string n, string q, string p) { name = n; quantity = q; price = p; };
    void read(int N);
};
 
void Apteka::read(int N) //ввод данных
{
    string n;
    string q;
    string p;
    Date a;
    cout << "Вводите только правильные данные!" << endl;
    cout << "При вводе неверных данных ввод будет повторен." << endl;
    for (int i = 0; i < N; i++)
    {
 
            cout << "Введите данные " << i + 1 << endl;
            cout << "Введите название лекарства: "; cin >> n;
            cout << "Введите количество: "; cin >> q;
            cout << "Введите цену: "; cin >> p;
            cout << "Дата выпуска" << endl;
            a.FirstDate();
            cout << "Дата просрочки" << endl;
            a.SecondDate();
            a.diff();
        cout << endl;
    }
}
 
int main()
{
    // локализация консоли
    setlocale(LC_CTYPE, "russian");
    Apteka b;
    b.read();
    cout << endl;
    // пауза
    cin.get();
    cin.get();
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.11.2018, 16:26
Ответы с готовыми решениями:

Для класса "Quadrangle" не существует конструктор по умолчанию
Добрый вечер, студия выдает ошибку, не могу разобраться в чем именно заключается проблема, понимаю что где-то не так написан конструктор, а...

Для класса "R" не существует конструктор по умолчанию
Подскажите, что не так. И как здесь пользоваться cout? Чтобы вывести с. Просто я вбивал, а он не работает. И где его вообще вбивать нужно? ...

Для класса не существует конструктора по умолчанию
Employe.h #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;conio.h&gt; using std::string; using std::cout; using std::cin; ...

14
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
26.11.2018, 16:32
C++
1
class Apteka : public Date
Для начала...
0
0 / 0 / 1
Регистрация: 04.12.2014
Сообщений: 143
26.11.2018, 16:35  [ТС]
Все стало очень плохо((((
UPD: Обновилось и ошибки что на скрине исчезли, но ошибка с конструктором осталась
Миниатюры
Для класса не существует конструктор по умолчанию  
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
26.11.2018, 16:37
Вы создаете конструктор с параметрами:
C++
1
Apteka(string n, string q, string p) { name = n; quantity = q; price = p; }
А экземпляр класса создаете без параметров.
C++
1
Apteka b;
Конечно компилятор не нашел конструктора без параметров, и сам его не стал создавать, т.к. вы уже определили свой конструктор. Тут есть два варианта:

1. Создавать экземпляр класса с указанием параметров.

C++
1
Apteka b("Строка для n", "Строка для q", "Строка для p");
2. Добавить конструктор без параметров, он и есть конструктор по умолчанию.
C++
1
Apteka() { }
1
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
26.11.2018, 16:39
Теперь в Date, объявляем конструктор, в разделе public:
C++
1
Date() {}
И сразу вопрос - в чем цель задачи? Для чего нужно наследование? Это разные сущности
0
0 / 0 / 1
Регистрация: 04.12.2014
Сообщений: 143
26.11.2018, 16:40  [ТС]
Теперь он пишет Ошибка C3867 "Apteka::read": нестандартный синтаксис; используйте "&", чтобы создать указатель на член
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
26.11.2018, 16:40
И да, n1b1ru прав, без указания спецификатора public при наследовании будет выполнено закрытое (private) наследование. Это вряд ли то, что вам нужно.
0
0 / 0 / 1
Регистрация: 04.12.2014
Сообщений: 143
26.11.2018, 16:42  [ТС]
На аптечном складе хранятся лекарства.Сведения о лекарствах содержатся в специальной ведомости : наименование лекарственного препарата; количество; цена; срок хранения(в месяцах, нужно высчитать из даты создания дату просрочки). Выяснить, какие препараты имеют срок хранения более 3 месяцев.Упорядочить по сроку хранения.
0
 Аватар для Nishen
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,814
26.11.2018, 16:44
Для твоей задачи нужно делать сущности:
Drug, ******cy, Register.
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
26.11.2018, 16:44
Объявление:
C++
1
void read(int N);
Вызов функции:

C++
1
b.read();
Нет перегруженной функции без параметра. (1) Объявляйте еще одну функцию или (2) указывайте значение по умолчанию или (3) указывайте параметр при вызове.
0
0 / 0 / 1
Регистрация: 04.12.2014
Сообщений: 143
26.11.2018, 16:48  [ТС]
Цитата Сообщение от valen10 Посмотреть сообщение
1
void read(int N);
Цитата Сообщение от valen10 Посмотреть сообщение
1
b.read();
Если я так делаю то он же не взаимодействует с классом Аптека.
Цитата Сообщение от valen10 Посмотреть сообщение
Объявляйте еще одну функцию или (2) указывайте значение по умолчанию или (3) указывайте параметр при вызове.
Тоесть?

Добавлено через 18 секунд
Цитата Сообщение от Nishen Посмотреть сообщение
сущности
Что значит сущности?
0
75 / 59 / 31
Регистрация: 20.03.2017
Сообщений: 351
26.11.2018, 16:55
Stig30rus, а вы хоть какую-то литературу пробовали читать о классах? А то такое ощущение что весь код это Ctrl+C -> Ctrl+V.
0
0 / 0 / 1
Регистрация: 04.12.2014
Сообщений: 143
26.11.2018, 16:57  [ТС]
Как инициализировать переменную N? Я уже и указателями пытался и отдельно объявлял, все бестолку.
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <iostream>
#include<conio.h>
#include<clocale>
#include<stdlib.h>
#include<ctime>
#include<iomanip>
#include<cmath>
#include<stdio.h>
#include<windows.h>
#include <string>
#include <algorithm>
using namespace std;
 
class Date
{
    const int oneday = 0x15180;
    int day1, month1, year1;
    int day2, month2, year2;
    string name;
    string quantity;
    string price;
public:
    Date() {}
    void FirstDate()
    {
        cout << "Введите первую дату:\n\tВведите число: ";
        cin >> day1;
        cout << "\tВведите месяц: ";
        cin >> month1;
        cout << "\tВведите год: ";
        cin >> year1;
    }
    void SecondDate()
    {
        cout << "Введите вторую дату:\n\tВведите число: ";
        cin >> day2;
        cout << "\tВведите месяц: ";
        cin >> month2;
        cout << "\tВведите год: ";
        cin >> year2;
    }
    void diff()
    {
        tm FirstDate = { 0, 0, 0, day1, month1 - 1, year1 - 0x76C, 0, 0, 0 };
        tm SecondDate = { 0, 0, 0, day2, month2 - 1, year2 - 0x76C, 0, 0, 0 };
        time_t t1 = mktime(&FirstDate);
        time_t t2 = mktime(&SecondDate);
        time_t diff = ((t1 > t2) ? t1 - t2 : t2 - t1) / oneday;
        cout << "\nДней между датами: " << diff << '\n';
    }
};
 
class Apteka:public Date
{
    string name;
    string quantity;
    string price;
    public:
    Apteka() { }
    Apteka(string n, string q, string p) { name = n; quantity = q; price = p; };
    void read(int *N);
};
 
void Apteka::read(int N) //ввод данных
{
    string n;
    string q;
    string p;
    Date a;
    cout << "Вводите только правильные данные!" << endl;
    cout << "При вводе неверных данных ввод будет повторен." << endl;
    for (int i = 0; i < N; i++)
    {
 
            cout << "Введите данные " << i + 1 << endl;
            cout << "Введите название лекарства: "; cin >> n;
            cout << "Введите количество: "; cin >> q;
            cout << "Введите цену: "; cin >> p;
            cout << "Дата выпуска" << endl;
            a.FirstDate();
            cout << "Дата просрочки" << endl;
            a.SecondDate();
            a.diff();
        cout << endl;
    }
}
 
int main()
{
    // локализация консоли
    setlocale(LC_CTYPE, "russian");
    Apteka b("Строка для n", "Строка для q", "Строка для p");
    b.read(N);
    cout << endl;
    // пауза
    cin.get();
    cin.get();
    return 0;
}
Добавлено через 47 секунд
"C++: базовый курс" автора Шилдт Герберт
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
26.11.2018, 17:02
Цитата Сообщение от Stig30rus Посмотреть сообщение
Как инициализировать переменную N
Какую переменную? Это аргумент функции, значение которого нужно передавать при вызове функции.

Обратите внимание на комментарий Nishen. У вас действительно нелогичное наследование. Мои комментарии относятся только с синтаксису, но не к решению задачи.
1
75 / 59 / 31
Регистрация: 20.03.2017
Сообщений: 351
26.11.2018, 17:05
Stig30rus, у вас нет объявление переменной N и нет её инициализации. Где-то должно быть что-то типо такого:
C++
1
int N = 10;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.11.2018, 17:05
Помогаю со студенческими работами здесь

Cделать конструктор по умолчанию и копирования для класса
Вот у меня класс строка: class strg { char *str; int len; public: strg(); strg(const strg &amp;); }; реализация:

Конструктор класса не видит конструктор по умолчанию другого класса
Ошибка, естественно, в Classes.cpp, в строке 20. Ругается, что у класса TailNode нет конструктора по умолчанию, хотя он там, конечно, есть....

Вопрос про конструктор класса по умолчанию
http://s2.ipicture.ru/uploads/20111029/A7AtbNYV.jpg Пункт первый не могу немного понять.Т.е получается,что всегда лучше создавать самому...

Почему конструктор по умолчанию не обнуляет данные класса?
Никак не могу понять, почему вместо 0, 0 (объект pt1) конструктор по умолчанию выводит -858993460, -858993460 ? Я пробовал не писать...

Конструктор класса по умолчанию: код компилируется, хотя по идее не должен
#include &lt;iostream&gt; class A {}; int main() { A i; A j(i); return 0;


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru