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

Вызов динамического аргумента класса в другом классе

07.04.2018, 20:20. Показов 1451. Ответов 3

Студворк — интернет-сервис помощи студентам
Здравствуйте! Появилась проблема, в ходе решения задания, есть переменная scolarship, которая в ходе выполнения работы программы принимает два разных значения (1 или 2). Задание: нужно посчитать кол-во раз, когда переменная приняла значение 2. Сложность возникла в том, что данная переменная является аргументом класса и компилятор ругает ее за то, что она должна быть статической(хотя мне нужно чтобы она принимала два значения). Как это решить?


Класс, в котором есть геттеры и сеттеры scholarship:

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
class Student {
 
public:
    
    .....................................................
 
    void set_scholarship(int m) {
        scholarship = m;
    }
 
    int get_scholarship() {
        return scholarship;
    }
 
 
    void describe() {
        cout << "Name: " << get_name() << endl;
        cout << "Last name: " << get_last_name() << endl;
        cout << "Course: " << get_course() << endl;
 
        if (scholarship == 2) {
            cout << "Scholarship: " << "Yeah" << endl;
        }
        if (scholarship == 1) {
            cout << "Scholarship: " << "Nope" << endl;
        }
        cout << endl;
    }
    ~Student()
    {
        cout << "\nDestructor has worked!!! \n";
 
    }
  int scholarship;
Метод в другом классе, который считает кол-во переменных scholarship, принимающих значение 2:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void ScolarshipInYear() {
        char string[] = "Expenses of the state on the scholarship of our group is: ";
        char valuta[] = " hryvnas";
        cout << string << " Students with scholarship: " << endl;
        int z;
        int j = 0;
        int n = 4;
        int * arr = new int[n] {Student::scholarship};
        for (int i = 0; i < n; i++) {
            if (Student::scholarship == 2) {
                j++;
            }
        }
        z = j * 1300 * 9;
        cout << string << z << valuta << endl;
 
    }


При компиляции выдает следующее:
E0245 нестатическая ссылка не член должна указываться относительно заданного объекта
E0245 нестатическая ссылка не член должна указываться относительно заданного объекта
C2597 недопустимая ссылка на нестатический член "Student::scholarship"
C1903 не удается восстановить после предыдущих ошибок; остановка компиляции
C2440 инициализация: невозможно преобразовать "unknown" в "int []"
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.04.2018, 20:20
Ответы с готовыми решениями:

Вызов метода одного класса в другом классе
Привет всем Когда запускаю, то в методе GetOut() вместо имени человека выводится цифра 1 Помогите пожалуйста, заранее спасибо. ...

Вызов нестатической функции класса в другом классе
Нужно вызвать нестатическую функцию одного класса в другом классе (указатель на функцию передаю в конструкторе) Если коротко, то так: ...

Вызов статического метода класса в другом классе
Как вызвать статический метод из одного класса в другом? вот этот код не работает class A{ static function vivod($msg){ ...

3
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
07.04.2018, 23:38
C++
1
2
3
4
5
6
        Student * arr = new Student[n]; 
        for (int i = 0; i < n; i++) {
            if (arr[i].get_scholarship() == 2) {
                j++;
            }
        }
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
08.04.2018, 00:10
MaxSquirrel, суть вопроса ясна, но суть проблемы, - нет. Понятно лишь, что стоит организовать счётчик. Самый простой путь - реализация паттерна наблюдатель с идеоиой один ко многим. То есть каждый объект наблюдаемого класса (или группы объектов класса), должен подписать наблюдателя (синглтон, возможно) для наблюдения за событием типа: set_scholarship(int). То есть, в данном случае важен именно случай когда значение равно 2. В этом разе каждый наблюдаемый хапускает на наблюдателе метод типа: count_two() который увеличивает счётчик наблюдателя на 1 каждый раз, когда у котого-то из наблюдаемых случилось 2. Это реализуется подпиской (передачей указателя) и реализацией интерфейса или обратного вызова.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
08.04.2018, 01:23
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void ScolarshipInYear(Student * arr, int n) 
{
        char string[] = "Expenses of the state on the scholarship of our group is: ";
        char valuta[] = " hryvnas";
        cout << string << " Students with scholarship: " << endl;
        int z;
        int j = 0;
        f or (int i = 0; i < n; i++) {
            if (arr[i].get_scholarship() == 2) {
                j++;
            }
        }
        z = j * 1300 * 9;
        cout << string << z << valuta << endl;
 
    }
Где-то в main() (с учётом того, что никто не знает ни класса, в котором есть метод ScolarshipInYear(), ни того, как этот класс относится к классу Student):
C++
1
2
3
4
5
6
7
//...
const int N = 4;
Student  arr[N]; // в классе должен быть конструктор по умолчанию
// здеь заполнение массива некими данными
//...
ScolarshipInYear(arr, N);
//...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.04.2018, 01:23
Помогаю со студенческими работами здесь

Как использовать объект класса, созданого в определеном классе, в другом классе
У меня такой вопрос,как использовать объект класса,созданого в определеном классе,в другом классе.У меня есть объект pl класса Player,это...

Вызов метода в другом классе
Это метод класса.Я пытаюсь реализовать взятие на проходе пешки.Вопрос почему после каждого хода объект prev=null он стирается(походу объект...

Вызов метода в другом классе
У меня очень обширный вопрос.Если вкратце я пишу курсач шахматы.У меня есть 3 класса Moves.cs Chess.cs и FigureMoving.сs.Я пытаюсь...

Global Hook и вызов в другом классе
public class Nimaf { UserActivityHook actHook; void LOL1(object sender, System.EventArgs e) { ...

как передать функции в качестве аргумента указатель на функцию описанной в другом классе?
Есть два класса A и B в классе A есть две функции funcA_1 и funcA_2 в классе B - funcB в funcA_1 создается экземпляр класса B и...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Камера 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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru