Передача значений в другую функцию класса дает ноль при печати - PullRequest
0 голосов
/ 25 января 2020

Я пытаюсь использовать возвращение int number_of_groups и передать его в функцию djecja_reduta Это заголовочный файл, а затем печатать его сначала karneval number_of_groups() выдает нормальные значения, но void djecja_reduta::number_of_groups() дает 0 результатов

Пример : Я ввожу

number_home_groups = 200
number_foreign_groups = 300 

при первом вызове, он дает мне 500 сумм, но после вызова djecja_reduta::number_of_groups() он дает мне сумму 0

#pragma once
#include <iostream>
#include <cstring>
using namespace std;
class karneval {
private:
    char name_carneval[30];
    int number_home_groups;
    int number_foreign_groups;
    int sum;
public:
    karneval() : number_home_groups(0),
                 number_foreign_groups(0),
                 sum(0)
    {
        strcpy(name_carneval, "");
    }

    void input();
    int number_of_groups();
};
void karneval :: input() {
    cout << "Input number home groups" << endl; 
    cin >> number_home_groups;
    cout << "input number_foreign_groups" << endl;
    cin >> number_foreign_groups;
}
int karneval:: number_of_groups() {
    sum = number_home_groupa + number_foreign_groups;
    cout << "Suma je:" << sum << endl;
    return sum;
}
class djecja_reduta:public karneval {
private:
    char mjesto_odrzavanja[30];
    int datum_odrzavanja;
public:
    void  number_of_groups();
};
void djecja_reduta:: number_of_groups(){
    karneval karneval;
    karneval.number_of_groups();
}

Это основной файл

#include <iostream>
#include "Header.h"
using namespace std;
int main() {
    int n;
    cout << "Inesert number of carnevals" << endl;
    cin >> n;
    karneval* a = new karneval[n];
    djecja_reduta* b = new djecja_reduta[n];
    for (int i = 0; i < n; i++) {
        cout << i + 1 << ".karneval" << endl;
        a[i].input();

    }
    for (int i = 0; i < n; i++) {
        a[i].number_of_groups();
        b[i].number_of_groups();
    }
    delete[]a;
    a = NULL;
    delete[]b;
    b = NULL;
}

Вывод: Suma je: 500 Suma je: 0

1 Ответ

1 голос
/ 25 января 2020

Ваш конструктор реализован неправильно.

karneval() {
    char naziv_karnevala[30] = "";
    int broj_domacih_grupa = 0;
    int broj_stranih_grupa = 0;
    int suma = 0;
}

Здесь переменные являются локальными переменными функции. Они не совпадают с переменными-членами класса. Следовательно, переменные-члены не инициализируются должным образом. Это, скорее всего, вызывает проблемы вниз по течению. Измените его на:

karneval() : broj_domacih_grupa(0),
             broj_stranih_grupa(0),
             suma(0)
{
   std::strcpy(naziv_karnevala, "");
}

Обновление в ответ на комментарии ОП

Вывод

b[i].number_of_groups();

всегда будет нулевым с вашим кодом. В этой функции у вас есть

karneval karneval;
karneval.number_of_groups();

То, что karneval не зависит от объектов, которые вы выделили и предоставили вход для main.

Кроме того, объекты в a в main и отличается от объектов в b. Вы собираете данные только для a. Объекты в b имеют состояние по умолчанию.


Мне не ясно, что вы пытаетесь сделать и какое поведение вы ожидаете от программы. Из-за этого я не могу дать более конструктивной обратной связи.

...