2017-07-20 10 views
1

は長さ3のベクトルに初期化されたインスタンス変数を、次のクラスを考えてみましょう。そのタイプを一度だけ書く方法はありますか? (現実の生活の中で、私は道より冗長型の名前を扱っています。)C++を繰り返すタイプ

私はこれが機能するはずと思った:おそらく、

class A { 
public: 
    vector<int> a(3); 
}; 

が、いや、それはとにかくC++ 11のためにしませんなぜなら 'a'がメンバー関数として宣言されているように見えるからです。

+0

つまり、実際にはコンストラクタの外で変数をインスタンス化するべきではありません。それで、1つの問題が修正されます。 – DavidBittner

+3

@DavidBittnerデフォルトイニシャライザで何が問題になっていますか? – Quentin

+0

これは良い習慣に反すると思った。そうでない場合は、TIL – DavidBittner

答えて

3

いいえ、このようなことはできません。どちらかあなたが最初のソリューションを使用するか、次の操作を実行する必要があります。

class A { 
private: 
    vector<int> a; 
public: 
    A() : a(3) {}; 
}; 

Live Example

+0

OPのように、有効なC++ではないので、 'ベクトル(3);'を削除したいと思います。また、ベクトル a {3};は、 'std :: initializer_list'sでコンストラクタを好むリストの初期化であるため、全く異なる処理を行います。 – Rakete1111

+0

@ Rakete1111が修正されました。構文エラーでした。ああ、それは私の心をスキップし、他の構文は別のことを行います。ナイスキャッチ。 –

+0

ありがとうございます、これは正しく見えます。そんな単純なこと。挫折している... –

0

また、あなたは、ブレースの初期化構文を使用することができます。

class A 
{ 
    vector<int> a{1,2,3}; 
}; 

今、ベクトルは3つの要素が含まれています。

関連する問題