2010-05-07 68 views
16

工作我在VC寫了這個程序++ 2010:initializer_list不VC10

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

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

錯誤1個錯誤C2552: 'C': 非-aggregates不能初始化 與初始化 名單C:\用戶\ pswin \文檔\ Visual 工作室 2010 \項目\ test_C++ 0x中\ test_C++ 0x中\ main.cpp中27

2智能感知:初始化與 '{...}' 不允許 類型的對象 「class1的」 C:\用戶\ pswin \文檔\ Visual 工作室 2010 \ projects \ test_C++ 0x \ test_C++ 0x \ main.cpp 27

是什麼問題?

+0

它聽起來像你需要使用數組這個功能......「聚合」只是真的聽起來像那樣... :) – Zoltan 2010-05-07 22:27:54

回答

34

它不應該被支持at all

[...]初始化列表的的C++ 0x核心語言功能,以及相關的標準庫的變化並沒有在VC10實現。

該錯誤消息是指預先的C++ 0x集合初始化的功能,它允許某些用戶定義類型的初始化通過使用大括號:

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

聚集體在定義第8.5.1節

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

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