首页 > 解决方案 > 即使传递了函数,C++ 初始化变量仍保持打印为零

问题描述

我传递了一个函数来计算数组中所有数字的总和,但它输出为 0,这是我将它初始化为的值。该函数位于与实际程序不同的文件中(我还创建了一个名为 Stats 的类)。当我在函数中显示总和时,它会显示正确的数字。只有当我将它初始化为 0 时才会出错。当我通过函数时,我怎样才能让它在哪里,总数实际上更新到正确的数量而不是零。

const int num = 12;
class Stats
{
private:
    double stats[num];
    double total = 0;
public:
    void setValue(double stats[num], int);
    double calcTotal(double stats[num], double);

};

double Stats::calcTotal(double stats[num], double total)
{
    total = 0;
    for (int i = 0; i < num; i++)
    {
        total += stats[i];
    }
    cout << total;
    return total;
}

int main()
{
    double rainFall[num];
    double total = 0;

    Stats rainStats;

    for (int i = 0; i < num; i++)
    {
        cout << "What was the rain fall for month #" << i + 1 << " ?" << endl;
        cin >> rainFall[i];
        rainStats.setValue(rainFall, num);
    }

    rainStats.calcTotal(rainFall, total);
    cout << total;
    return 0;
}

它打印出 0 inint main()但 in calcTotal,它是正确的数量。

标签: c++arraysfunctionobjectparameter-passing

解决方案


total是按值传递的,所以它只是参数的一个副本,内部对其进行的任何修改calcTotal()都与传入的原始参数(即totalin main())无关。

您可以更改为按引用传递(然后不需要返回值)。

void calcTotal(double stats[num], double&);

或者在main().

total = rainStats.calcTotal(rainFall, total);

推荐阅读