我用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类型的对象不允许使用'{...}‘进行初始化
有什么问题吗?
发布于 2010-05-08 06:40:17
它不应该被支持at all
...VC10中没有实现初始化器列表的C++0x核心语言功能和相关的标准库更改。
该错误消息指的是聚合初始化的C++0x之前的功能,该功能允许通过使用大括号初始化某些用户定义的类型:
struct pair { int first; char second; };
pair p = { 0, 'c' };
聚合在§8.5.1中定义
聚合是一个数组或类(第9条),没有用户声明的构造函数(12.1),没有私有或受保护的非静态数据成员(第11条),没有基类(第10条),没有虚函数(10.3)。当聚合被初始化时,初始化器可以包含初始化器子句,该初始化器子句由大括号封闭的、以逗号分隔的聚合体成员的初始化器子句列表组成,该列表以递增的下标或成员顺序写入。如果聚合包含子聚合,则此规则以递归方式应用于子聚合的成员。
https://stackoverflow.com/questions/2792028
复制相似问题