Массив не выдает правильный вывод - PullRequest
1 голос
/ 21 апреля 2020

У меня проблема с назначением переменных в массив из разных функций. У меня есть две функции, которые производят разные числа. Затем я хочу присвоить эти числа частному массиву в том же классе. Когда я делаю это, массив возвращает большие отрицательные числа.

// Array.h
class Array {
private:   
     int W = A;   
     int Q = B; 
     int sum[2] = {W, Q};
public:   
     int A;    
     int B;    
     int num1();    
     int num2();   
     int add();
};


// Array.cpp
#include<iostream>
using namespace std;
#include "Array.h"

int Array::num1()
{
    int x = 3;
    int y = 4;
    A = x + y;
    cout << A << endl;
    return A;
}

int Array::num2()
{
    int x = 2;
    int y = 5;
    B = x + y;
    cout << B << endl;
    return B;
}

int Array::add()
{
    for(int i = 0; i < 2; i++)
    {
        cout << sum[i] << endl;
    }
    return 0;
}


// main.cpp
#include <iostream>
#include "Array.h"

int main() {
    Array sumTotal;
    sumTotal.num1();
    sumTotal.num2();
    sumTotal.add();
    return 0;
}

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Проблема здесь:

int W = A;
int Q = B;
int sum[2] = { W, Q };

Вы просто копируете значения из A и B в W и Q. И позже, когда вы устанавливаете A и B, эти изменения не отражаются в W или Q. Таким образом оставляя W и Q неинициализированными.

Примечание: рассмотрите возможность более детального изучения C ++ topi c в области массивов, указателей и ссылок.

Это модифицированный код, который работает нормально:

#include <iostream>


using namespace std;

class Array {
private:
   int sum[2];
public:
   int num1();
   int num2();
   int add();
};


int Array::num1()
{
   int x = 3;
   int y = 4;
   sum[0] = x + y;
   cout << sum[0] << endl;
   return sum[0];
}

int Array::num2()
{
   int x = 2;
   int y = 5;
   sum[1] = x + y;
   cout << sum[1] << endl;
   return sum[1];
}

int Array::add()
{
   for (int i = 0; i < 2; i++)
   {
      cout << sum[i] << endl;
   }
   return 0;
}


int main(int argc, char** argv)
{
   Array sumTotal;
   sumTotal.num1();
   sumTotal.num2();
   sumTotal.add();

   return 0;
}
0 голосов
/ 21 апреля 2020

Причина, по которой вы получаете значения мусора (в вашем случае большие отрицательные числа), заключается в том, что вы не инициализируете A или B для каких-либо значимых значений, а затем вы не обновляете sum при вызове num1 или num2.

Вы должны инициализировать A и B чем-то значимым в классе или, по крайней мере, инициализировать его по умолчанию.

Затем вам нужно обновить sum в num1, например:

int Array::num1()
{
    int x = 3;
    int y = 4;
    A = x + y;
    sum[0] = A;        // <- add this
    cout << A << endl;
    return A;
}

и выполните аналогичные действия внутри num2.

У вас также есть 2 переменные W и Q внутри вашего класс, который, кажется, не служит какой-либо цели. Помимо проблемы с неправильной инициализацией их значениями мусора, они вам даже не нужны; вместо этого вы можете использовать A и B.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...