1

さて、この問題に対処するためにいくつかの方法を試しましたが、修正できないようです。

私のヘッダーファイルには次のものがあります:

class MyClass {
public:
  bool test;

  struct MyStruct;
};

コンストラクターなどもありますが、それは重要ではありません/エラーを引き起こしません

cpp で私がやりたいことは次のとおりです。

MyClass::MyStruct {
  test=true;
};

これに関する問題は、構造体がテスト変数にアクセスできないことです。現在のインスタンスの変数を構造体に渡す方法、または構造体が変数にアクセスできるようにする他の方法を教えてください。

4

3 に答える 3

2

これ:

MyClass::MyStruct {
  test=true;
};

有効な C++ コードではありません。おそらくあなたはこれを意味しました:

MyClass::Class() {
  test=true;
}

which は、 which のデフォルトのコンストラクターをMyClassに設定testtrueます。MyClass::testしかし、あなたの質問はfromの値を設定したいようですMyClass::MyStruct。入れ子になったクラス (またはあなたの場合は構造体) は「継承」も「包含」もせず、実際にはそれを囲むクラス (または構造体) とほとんど特別な関係を持たないため、これは実際には不可能です。

別の可能性は次のとおりです。

class MyClass {
public:
  static bool test;

  struct MyStruct;
};

MyClass::MyStruct::MyStruct() {
  test=true;
}

これは、ネストされた構造体のデフォルトのコンストラクターを作成し、それを囲むクラスに変数を設定しますが、変数は静的である必要があります。つまり、クラスまたは構造体のインスタンスごとに個別の値ではなく、プログラム全体で 1 つだけ存在することを意味します。

于 2013-06-21T12:16:39.310 に答える
0

friendクラス定義で構造体を として宣言できます。

class MyClass {
public:
  bool test;

  friend struct MyStruct;
};

編集:

class MyClass {
   friend class MyStruct(MyClass *myClass) : myClass(myClass) {
      private:
      MyClass *myClass;
   }

   MyStruct *myStruct;

   bool test;

   public:

   MyClass() {
      myStruct = new MyStruct(this);
   }

}

注: これはテストされておらず、ブラウザで記述しただけです。デストラクタなどが不足していることは知っています。

親ポインターをメンバー クラスに渡すため、メンバー クラスはfriend.

于 2013-06-21T12:15:42.263 に答える