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

Не могу найти понять почему выдает ошибку

28.03.2016, 19:48. Показов 2430. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте в недавнем времени начали изучать С++. Изучаю классы и при работы с классом наследовании у меня возникла ошибка при работе программы.
Код программы прилагается.Прошу помочь мне найти ошибку программы.
Суть задания,что мне надо сделать.
Создать класс книга: с полями название,автор,год издания.
Класс потомок книжный магазин:название книги,автор,год издания,цена.
Суть задания уменьшить стоимость книги на 20%,если книге больше 5 лет.
Ошибка что мне выбивает Buider( я компилирую здесь в Console)
[C++ Error] Unit1.cpp(53): E2247 'book::let_knige()' is not accessible
[C++ Error] Unit1.cpp(52): E2285 Could not find a match for 'book_magazin::book_magazin(string,strin g,int,double)'
А еще просьба помочь в вычетом цены книги, если ей больше 5 лет.

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
#include <iostream>
#include <math.h>
using namespace std;
 
class book
{
protected:
    int year;
book(int iyear):year(iyear){}
void set(int iyear)
{year=iyear;}
int  get()
{return year;}
int  let_knige()
{return 2016-year; }
};
class book_magazin:public book
{
private: double cost;
public:
book_magazin(int iyear,double c) :book(iyear), cost(c){}
int cena()
{
//if (let_knige()>5)
return cost*0.8;
}
};
int main()
{
string c,d;
cout << "vedite im9 avtora: ";
    getline(cin,c);
 
    cout << "Avtor: " << c << "!!! \n";
    cout << "nazvanie knigi : ";
    getline(cin,d);
 
    cout << "vashe naimenovanie: " << d << "!!! \n";
 
       int a;
       double b;
      cout <<  "God izdani9 knigi="; cin >> a;
      cout <<  "cena knigi="; cin >> b;
book_magazin h(c,d,a,b);
  cout  << "Let knige=" << h.let_knige() << endl;
    cout << "Cena knigi=" << h.cena() << endl;
system("pause");
        return 0;
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.03.2016, 19:48
Ответы с готовыми решениями:

не могу понять, почему выдает ошибку
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;iomanip&gt; using namespace std; #include &quot;mobilary.h&quot; void show (int **ptr, int...

Выдает ошибку но я не могу понять почему
#include &lt;iostream&gt; using namespace std; struct warehouse { char *name; int number, prise, date; }; void Info...

Не могу понять, почему выдает ошибку на px
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;Windows.h&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; ...

7
 Аватар для meJevin
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
28.03.2016, 20:56
44-ая строка - у тебя не существует конструктора, которой бы принимал 4 аргумента, у тебя он на два аргумента (смотри свою 21-ю строку). 45-ая строка - ты не имеешь права объектами обращаться к методам, которые были заданы в protected (смотри свою 14-ю строку и 7-ю). Для решения первой проблемы - использую два аргумента в конструкторе, вместо четырех. Для решения второй проблемы - сделай метод int let_knige() не в protected: модификаторе доступа, а в public:

Добавлено через 7 минут
Еще, вторую проблему можно решить, создав в классе book_magazin в public: модификаторе доступа функцию с таким же названием, которая бы использовала ту же функцию класса book. Примерно так:
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
class book
{
protected:
    int year;
    book(int iyear) :year(iyear) {}
    void set(int iyear)
    {
        year = iyear;
    }
    int  get()
    {
        return year;
    }
    int  let_knige()
    {
        return 2016 - year;
    }
};
class book_magazin :public book
{
private: double cost;
public:
    int let_knige() { book::let_knige(); }
    book_magazin(int iyear, double c) :book(iyear), cost(c) {}
    int cena()
    {
        if (let_knige()>5)
        return cost*0.8;
    }
};
1
0 / 0 / 0
Регистрация: 28.11.2015
Сообщений: 79
28.03.2016, 21:04  [ТС]
meJevin,
Спасибо,заработало. Хочу еще кое-что спросить. Строка 24 я указываю,что если лет книге больше 5 то цена должна уменьшиться на 20%. Но при работе она так не делает.
0
 Аватар для meJevin
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
28.03.2016, 21:08
pro100suxx, вы хотите чтобы в объекте цена навсегда уменьшилась на 20%? Если да, то тогда вам надо в конструкторе сделать условие, проверяющее, сколько лет книге, если ей больше 5, то cost *= 0.8;.
1
 Аватар для meJevin
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
28.03.2016, 21:11
Лучший ответ Сообщение было отмечено pro100suxx как решение

Решение

pro100suxx, вот тебе код исправленный(под твои 4 аргумента):
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
class book {
protected:
    int year;
    string auth_name;
    string title;
 
    book(int iyear, string iauth_name, string ititle) : 
        year(iyear), title(ititle), auth_name(iauth_name) {}
 
    void set(int iyear) { year = iyear; }
    int  get() { return year; }
    int  let_knige() { return 2016 - year; }
 
};
 
class book_magazin :public book {
private:
    double cost;
 
public:
    int let_knige() { return book::let_knige(); }
 
    book_magazin(int iyear, string iauth_name, string ititle, double price) :
        book(iyear, iauth_name, ititle), cost(price) {}
 
    int cena() {
        if (let_knige()>5)
        return cost*0.8;
    }
};
int main()
{
    string auth_name, title;
    cout << "vedite im9 avtora: ";
    getline(cin, auth_name);
 
    cout << "Avtor: " << auth_name << "!!! \n";
    cout << "nazvanie knigi : ";
    getline(cin, title);
 
    cout << "vashe naimenovanie: " << title << "!!! \n";
 
    int year;
    double price;
    cout << "God izdani9 knigi="; cin >> year;
    cout << "cena knigi="; cin >> price;
 
    book_magazin h(year, auth_name, title, price);
 
    cout << "Let knige=" << h.let_knige() << endl;
    cout << "Cena knigi=" << h.cena() << endl;
    system("pause");
    return 0;
}
Я бы еще тонну штук-приколюх добавил бы, но лень, жуть.
Миниатюры
Не могу найти понять почему выдает ошибку  
1
0 / 0 / 0
Регистрация: 28.11.2015
Сообщений: 79
28.03.2016, 21:21  [ТС]
meJevin,
C++
1
2
3
4
int cena() {
        if (let_knige()>5)
        return cost*0.8;
    }
вот,смотрите я здесь проверяю,если лет книге больше 5,то выполняется условие,а вот если я вожу к примеру 2014 год оно мне не выбивает цену которую я указал в начале.
0
 Аватар для meJevin
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
28.03.2016, 21:28
pro100suxx, ну, это же верно, так? У вас в условии сказано, что если книге больше 5 лет, то цена уменьшается на 20%. Соответственно, если ей меньше пяти лет или пять лет, то цена не будет меняться.

Добавлено через 2 минуты
pro100suxx, по-хорошему, вот так надо бы, кстати:
C++
1
2
3
4
5
6
double cena() {
        if (let_knige() > 5)
            return cost*0.8;
        else
            return cost;
    }
1
0 / 0 / 0
Регистрация: 28.11.2015
Сообщений: 79
28.03.2016, 21:47  [ТС]
meJevin, Спасибо вам.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.03.2016, 21:47
Помогаю со студенческими работами здесь

Не могу понять почему выдает ошибку: multiple definition
Здравствуйте, подскажите пожалуйста почему выдает ошибку: Есть проект, средних размеров. 2д игра. Поставили задачу сделать рандомный...

Выдает ошибку при компиляции. Не могу понять почему
Помогите с кодом. Я вижу что ошибка уровня самых низов но не могу понять все равно что тут не так. Вот эта ошибка: // error...

почему где подчеркнуто выдает ошибку,понять не могу(программа не дописана)
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() { setlocale( LC_ALL,&quot;Russian&quot; ); int a,i,j; ...

Не могу понять почему выдает ошибку. Подскажите в чем не прав, код прилагаю ниже
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;map&gt; using namespace std; class Person{ public: void ChangeFirstName(int...

Выдает ошибку. Не могу понять что не так
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; float f(double x) //возвращает значение функции f(x) = e^x+x^2-2 { ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru