我有一个名为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
我似乎可以弄清楚为什么对象没有得到更新。如果您需要更多信息,请询问。 提前谢谢。
答案 0 :(得分:1)
在您的函数void insertNumbers(Random Random1)
中,您要向Random1
添加值,但是您要按值传递值。因此,当使用Random
实例调用此函数时,它会复制它,向其添加值并最终销毁它。您可以通过引用传递Random1
来解决此问题:void insertNumbers(Random &Random1)