0

Class1 から Class3 の変数 1 と 2 に書き込もうとしています。

Class1 から Class2 の変数への書き込みに問題はありません。ただし、Class1 から Class3 変数に永続的に書き込むことはできないようです。割り当て後に read() メソッド内の cout が正しい値を出力するため、正しい値を受け取っていることがわかります。ただし、同じ cout を print() メソッドに貼り付けても、新しい値は出力されません。一時的に書き込まれているようです...

クラスおかしくてごめんなさい

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 のコンストラクターは、Class2 で宣言されている Class3 にある read() を呼び出そうとしています...

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()

私の問題は、配列を宣言した方法、または配列にアクセス (書き込み) しようとしている方法にあると思います。何か案は?

4

1 に答える 1

1

問題は、Class2::getArrayメソッドがコピーを返していることです。

参照を返すように変更します

Class3& getArray(int i) { return myClass3Array[i]; }

問題は、オブジェクトのオリジナルではなく、オブジェクトのコピーの値を設定していることです。だから価値観が合わない。Class3Class2

もう 1 つの方法は、setArray メソッドを追加することです。

void setArray(int i, const Class3& a) { myClass3Array[i] = a; }

それから

Class3 c3;
c3.read(string1, string2);
myClass2Array[i].setArray(myClass2Array[i].getCount(), c3);
于 2013-05-06T05:06:29.903 に答える