我正在尝试从Class1写入Class3中的变量1和2。
从Class1写入Class2中的任何变量我没有任何问题。但是,我似乎无法从Class1永久写入Class3变量。我知道他们正在接收正确的值,因为在分配之后,read()方法中的cout将打印正确的值。但是,粘贴到print()方法中的相同cout将不会打印新值。似乎他们暂时写了......
对不起疯狂的课程
class Class1
{
public:
Class1();
private:
Class2 *myClass2Array;
};
Class1::Class1()
{
myClass2Array = new Class2[size];
myClass2Array[i].getArray(myClass2Array[i].getCount()).read(string1, string2); // this line is probably a problem
}
因此,Class1的构造函数试图调用Class3中的read(),它在Class2中声明...
class Class2
{
public:
Class2();
int getCount();
Class3 getArray(int i) { return myClass3Array[i]; }
private:
Class3 *myClass3Array;
int count;
};
Class2::Class2()
{
count = 0;
myClass3Array = new Class3[8];
}
我也尝试过Class3 myClass3Array [8];并在for循环中初始化每个...这是Class3
class Class3
{
string var1;
string var2;
public:
Class3();
void print();
void read(string, string);
};
Class3::Class3()
{
var1 = "";
var2 = "";
}
void Class3::print()
{
cout << var1 << " and " << var2 << endl; // will print old, initiated values
} // end function print()
void Class3::read(string string1, string string2)
{
var1 = string1;
var2 = string2;
cout << var1 << " " << var2 << endl; // will print new values
} // end function read()
我猜我的问题要么是我声明数组的方式,要么是我试图访问(写入)它的方式。有什么想法吗?
答案 0 :(得分:1)
问题是您的Class2::getArray
方法正在返回副本。
更改它以返回参考
Class3& getArray(int i) { return myClass3Array[i]; }
问题在于您要设置Class3
对象的副本的值,而不是Class2
对象中的原始值。这就是为什么你的价值观不坚持的原因。
另一种方法是添加setArray方法
void setArray(int i, const Class3& a) { myClass3Array[i] = a; }
然后
Class3 c3;
c3.read(string1, string2);
myClass2Array[i].setArray(myClass2Array[i].getCount(), c3);