-3

クラスがあります。

class myClass
{
public:
    myClass(int time);
}

次に、このクラスをstruct内に配置する必要があります。

class TopClass
{
 public:
  typedef struct{
    int myint;
    myClass myclass;
  }tStruct;

  tStruct sStruct1;
  tStruct sStruct2;

}

どうすればいいですか?myClassのコンストラクターを呼び出すにはどうすればよいですか?構造体の代わりにクラスを使用する唯一の方法はありますか?

私のコンストラクター

TopClass::TopClass():               
        sStruct1({32, myClass(100)}),
        sStruct2({52, myClass(1000)})
{

}

しかし、エラーが発生しています。

拡張初期化子リストは、-std = c++0xまたは-std=gnu++0xでのみ使用可能です

4

3 に答える 3

1

どうすればいいですか?myClass のコンストラクターを呼び出すにはどうすればよいですか?

structデフォルトのコンストラクターを持たないメンバーがあるため、コンストラクターが必要になります。typedefコンストラクターを持つには、エイリアスだけでなく、独自の名前も必要です。

struct tStruct {
    // If you want a default constructor:
    tStruct() : myClass(42) {}

    // If you want to specify the time:
    tStruct(int time) : myClass(time) {}

    int myint;
    myClass myclass;
};

構造体の代わりにクラスを使用する唯一の方法はありますか?

classstructまったく同じことを意味します (デフォルトのアクセス指定子が異なるという小さな違いは別として)。一方でできることは、もう一方でもできます。

于 2012-09-05T09:33:20.363 に答える
1

コンストラクターを構造体に追加できます: http://ideone.com/ifBw2

class TopClass
{
 public:
  struct tStruct {
    tStruct(int time, int k = 0): myint(k), myclass(time) {}
    int myint;
    myClass myclass;
  };

  TopClass(int t): sStruct1(t), sStruct2(t) {}

  tStruct sStruct1;
  tStruct sStruct2;

};

編集

新しい質問について-std=c++0xは、このようにするには、新しい標準 () を使用する必要があります。古い標準では、メンバー変数を初期化するために明示的な ctor を追加する必要があります。structC++ の場合とほぼ同じclassです。ctor、メンバー関数、静的関数を追加できます。唯一の違いは、デフォルトのプライバシー - public forstructおよびprivatefor ですclass

class A {
public: 
  int b;
};

とまったく同じです

struct A {
  int b; 
};
于 2012-09-05T09:34:17.200 に答える
0

実際、Pawel Zubrycki の答えは大丈夫です。

しかし、TopClass 内に別のクラス コンストラクターをインポートする必要があるのは、なぜこのようにしなければならないのかを知りたいのです。

つまり、コードは高い結束と低い結合のルールに従う必要があります。ソフトウェアの構築ではcomposition、クラス定義よりも (重要な設計モード) を優先します。次のコードのようなもの。

class B{
public:
    B(int y){b = y;}
private:
    int b;
};

class A {
public:
    A(int x):b(x){...};
private:
    B b;
};

コードから、クラス B を最大化し、明らかにクラス A の複雑さを減らすことができます。A と B はすべて単独で変更できます。

于 2012-09-18T15:55:00.680 に答える