我在VC ++ 2010中编写了这个程序:
class class1
{
public:
class1 (initializer_list<int> 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
问题是什么?
答案 0 :(得分:35)
不应该支持at all:
[...]初始化程序列表的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)。
初始化聚合时,初始化程序可以包含一个初始化子句,该子句由括号括起来的逗号分隔的聚合成员初始化子句列表组成,以增加的下标或成员顺序编写。如果聚合包含子聚合,则此规则以递归方式应用于子聚合的成员。