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

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

28.03.2016, 19:48. Показов 2456. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru