对象数组的条目未更新

时间:2016-04-05 16:21:50

标签: c++

我有一个名为Random的类,其中包含以下变量

private:
        int Numbers[10];
        int NrHighest;
        int NrLowest;
        int Index;
        int IndexH;
        int IndexL;

和一个名为friend void insertNumbers(Random Random1)`

的朋友函数
void insertNumbers(Random Random1)
{
    string line;
    int one,two,three;
    int columOne[10];
    int columTwo[10];
    int columThree[10];
    ifstream myfile("Numbers.dat");
    if (myfile.is_open())
    {
        int i = 0;
        while ( getline (myfile,line) )
        {
            sscanf(line.c_str(),"%i %i %i",&one,&two,&three);
            columOne[i] = one;
            columTwo[i] = two;
            columThree[i] = three;

            i++;
        }
        myfile.close();
    }

    else cout << "Unable to open file";

    switch(run)
    {
        case 0 :
        {
            for(int i = 0;i < 10;i++)
            {
                Random1.Numbers[i] = columOne[i];
                cout << Random1.Numbers[i] << endl;
            };
            break;
        }
        case 1 :
        {
            for(int i = 0;i < 10;i++)
            {
                Random1.Numbers[i] = columTwo[i];
                cout << Random1.Numbers[i] << endl;
            };
            break;
        }
        case 2 :
        {
            for(int i = 0;i < 10;i++)
            {
                Random1.Numbers[i] = columThree[i];
                cout << Random1.Numbers[i] << endl;
            };
            break;
        }
    }

    run ++;
};

我有一个cout << Random1.Numbers[i] << endl;来检查这些数字是否保存到Random1.Numbers并且输出是 Output

但是当我尝试在这里显示对象时问题就出现了

 cout << Random1;
 cout << Random2;
 cout << Random3;

调用重载函数,该函数也是友元函数friend ostream &operator<<( ostream &output,const Random & Random1);

ostream &operator<<( ostream &output,const  Random & Random1)
{
    for(int i = 0;i<10;i++)
    {
        cout << Random1.Numbers[i] << " ";
    }
    cout << endl << Random1.NrHighest << endl << Random1.NrLowest << endl << Random1.Index << endl << Random1.IndexH << endl << Random1.IndexL << endl;
    return output;
};

我在这里设置了Defauts值

Random()
        {
            Numbers = {0,0,0,0,0,0,0,0,0,0};
            NrHighest = 0;
            NrLowest = 0;
            Index = 0;
            IndexH = 0;
            IndexL = 0;
        };

而不是新的vaules,继承了重载运算符的输出&lt;&lt;函数Output

我似乎可以弄清楚为什么对象没有得到更新。如果您需要更多信息,请询问。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

在您的函数void insertNumbers(Random Random1)中,您要向Random1添加值,但是您要按值传递值。因此,当使用Random实例调用此函数时,它会复制它,向其添加值并最终销毁它。您可以通过引用传递Random1来解决此问题:void insertNumbers(Random &Random1)