一千萬個為什麽

搜索

我在VC ++ 2010中編寫了這個程序:

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

但是當我編譯項目時我得到這個錯誤:

錯誤1錯誤C2552:'c':   非聚合無法初始化   使用初始化程序   list c:\ users \ pswin \ documents \ visual   工作室   2010 \ projects \ test_c ++ 0x \ test_c ++ 0x \ main.cpp 27

2 IntelliSense:初始化   '{...}'不允許用作對象   類型   “class1”c:\ users \ pswin \ documents \ visual   工作室   2010 \ projects \ test_c ++ 0x \ test_c ++ 0x \ main.cpp 27

問題是什麽?

最佳答案

它不應該被支持在所有

[...]初始化程序列表的C ++ 0x核心語言功能以及相關的標準庫更改未在VC10中實現。

錯誤消息指的是聚合初始化的前C ++ 0x特性,它允許使用花括號初始化某些用戶定義的類型:

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

聚合在§8.5.1中定義:

聚合是一個數組或類(第9節),沒有用戶聲明的構造函數(12.1),沒有私有或受保護的非靜態數據成員(第11節),沒有基類(第10節),沒有虛擬功能(10.3)。

     

初始化聚合時,初始值設定項可以包含一個初始化子句,該子句由括號括起來的逗號分隔的聚合成員初始化子句列表組成,以增加的下標或成員順序編寫。如果聚合包含子聚合,則此規則以遞歸方式應用於子聚合的成員。

轉載註明原文: initializer_list在VC10中不起作用

猜你喜歡