16

私はこのプログラムを VC++ 2010 で書きました:

class class1
{
public:
 class1 (initializer_list<int> a){};
 int foo;
 float Bar;
};
void main()
{
 class1 c = {2,3};
 getchar();
}

しかし、プロジェクトをコンパイルすると、次のエラーが発生します。

エラー 1 エラー C2552: 'c': 非集計は初期化リスト c:\users\pswin\documents\visual studio 2010\projects\test_c++0x\test_c++0x\main.cpp で初期化できません 27

2 IntelliSense: '{...}' による初期化は、タイプ "class1" のオブジェクトには許可されていません c:\users\pswin\documents\visual studio 2010\projects\test_c++0x\test_c++0x\main.cpp 27

何が問題ですか?

4

1 に答える 1

36

まったくサポートされるべきではありません:

[...] 初期化子リストの C++0x コア言語機能と関連する標準ライブラリの変更は、VC10 では実装されませんでした。

このエラー メッセージは、集約初期化の C++0x 以前の機能に言及しています。これにより、中かっこを使用して特定のユーザー定義型を初期化できます。

struct pair { int first; char second; };
pair p = { 0, 'c' };

集計は§8.5.1で定義されています。

集合体は、ユーザーが宣言したコンストラクター (12.1)、プライベートまたは保護された非静的データ メンバー (条項 11)、基本クラス (条項 10)、および仮想関数 (10.3) を持たない配列またはクラス (条項 9) です。 )。

集合体が初期化されるとき、イニシャライザには、集合体のメンバーのイニシャライザ句を中かっこで囲んだコンマ区切りのリストで構成されたイニシャライザ句を含めることができます。集計にサブ集計が含まれている場合、このルールはサブ集計のメンバーに再帰的に適用されます。

于 2010-05-07T22:40:16.913 に答える