【问题标题】:Writing to variable within a class of another class写入另一个类的类中的变量
【发布时间】:2013-04-29 19:29:51
【问题描述】:

我正在尝试从 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()

我猜我的问题要么在于我声明数组的方式,要么在于我尝试访问(写入)它的方式。有什么想法吗?

【问题讨论】:

  • 问题(或问题)是您没有关注Rule of Three。您需要提供一个复制构造函数,复制赋值运算符,它将在Class2 中对动态分配的成员(myClass3Array)进行深层复制。或者,您可以使用智能指针代替原始动态分配的成员。
  • 你有足够的空间来完成一个完整的程序。建议您修复上面无法编译且有明显错误的位(例如 Class1::Class1)并添加一个 main 函数,以便我们可以试用您的代码。
  • 糟糕,错字了。只是试图提供良好的背景。 Main 在这里做的不多,只是 Class1 myClass1;该程序编译并运行,它只是不保存我写入 Class3 的值
  • @Mark in Class1::Class1() 你没有为myClass2Array分配任何内存
  • myClass2Array = new Class2[size];

标签: c++ arrays class


【解决方案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);

【讨论】:

  • 非常感谢,成功了!
猜你喜欢
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-14
  • 2013-09-17
  • 2014-10-06
  • 2023-04-07
  • 2020-11-24
相关资源
最近更新 更多