• ベストアンサー

classの中の配列の初期化

以下のようにclassの中で定義されている配列xを、 x[0]=x0,x[1]=x1,x[2]=x2 となるように初期化するコントラクタを作成したいのですが、 int test[3]={1,2,3}; vector<int> x(1,4,1);//--------1 vector<int> y(test);//---------2 1の場合でも2の場合でもエラーがでます。 どの様にすればいいのでしょうか? template<class TT> class vector{ private:  TT x[3]; public:  vector(TT* vv):x[0](vv[0]),x[1](vv[1]),x[2](vv[2]){}  vector(TT x0,TT x1,TT x2):x[0](x0),x[1](x1),x[2](x2){} };

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

 こんばんは。  配列はコンストラクタのイニシャライザで初期化出来ないのでは。 template<class TT> class vector{ private: enum { N = 3 }; TT x[N]; public: vector(const TT (&vv)[N]) { for(int i = 0; i < N; ++i) x[i] = vv[i]; } vector(TT x0,TT x1,TT x2) { x[0] = x0; x[1] = x1; x[2] = x2; } };  ではないでしょうか。但し、以下の様にコンストラクタを無くして、TT x[N]をpublicにすると、 template<class TT> class vector{ public: enum { N = 3 }; TT x[N]; void set(const TT (&vv)[N]) { for(int i = 0; i < N; ++i) x[i] = vv[i]; } void set(TT x0,TT x1,TT x2) { x[0] = x0; x[1] = x1; x[2] = x2; } };  ↓の様な固定長配列と同じ初期化子が使える筈です。  vector<int> x = {1, 2, 3};

coronalith
質問者

お礼

なるほど、配列はコンストラクタのイニシャライザで初期化はできないのですか。 どうも有り難うございました。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

今の C++ の規格ではできません. C++0x ならできるようになる, んだっけな.

coronalith
質問者

お礼

はー、そのような新しいのが作られていたのですかー 出てくるのが待ち遠しいですね

関連するQ&A

専門家に質問してみよう