【问题标题】:Array not producing correct output数组没有产生正确的输出
【发布时间】:2020-04-21 14:09:38
【问题描述】:

我在将变量分配给不同函数的数组时遇到问题。我有两个产生不同数字的函数。然后我想将这些数字分配给同一类中的私有数组。当我这样做时,数组返回大的负数。

// 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;
}

【问题讨论】:

    标签: c++ arrays function


    【解决方案1】:

    问题就在这里:

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

    您只是在处理从 A 和 B 到 W 和 Q 的价值。 稍后当您设置 A 和 B 时,这些更改不会反映到 W 或 Q。 从而使 W 和 Q 未初始化。

    注意:考虑在数组、指针和引用领域研究更多有关 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;
    }
    

    【讨论】:

      【解决方案2】:

      您获得垃圾值(在您的情况下为大负数)的原因是您没有将 AB 初始化为任何有意义的值,然后当您调用 @ 时您没有更新 sum 987654324@,或num2

      您应该将AB 初始化为类中有意义的内容,或者至少默认初始化它。

      那么你需要在num1中更新sum,像这样:

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

      num2 内部做类似的事情。

      您的班级中还有两个变量WQ,它们似乎没有任何用途。除了使用垃圾值错误地初始化它们的问题之外,您甚至不需要它们;您可以只使用AB

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-05
        • 2013-02-19
        • 1970-01-01
        相关资源
        最近更新 更多