- ベストアンサー
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){} };
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 配列はコンストラクタのイニシャライザで初期化出来ないのでは。 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};
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
今の C++ の規格ではできません. C++0x ならできるようになる, んだっけな.
お礼
はー、そのような新しいのが作られていたのですかー 出てくるのが待ち遠しいですね
お礼
なるほど、配列はコンストラクタのイニシャライザで初期化はできないのですか。 どうも有り難うございました。