我在 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
工作室
2010\项目\test_c++0x\test_c++0x\main.cpp 27
and
2 IntelliSense:初始化
对象不允许使用“{...}”
类型
“class1”c:\users\pswin\documents\visual
工作室
2010\项目\test_c++0x\test_c++0x\main.cpp 27
问题是什么?
不应该支持at all http://connect.microsoft.com/VisualStudio/feedback/details/533464/the-initializer-list-header-in-the-vc10-release-candidate:
[...]初始化列表的 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) )。
当聚合被初始化时,初始值设定项可以包含一个初始值设定项子句,该初始值设定项子句由大括号括起来、以逗号分隔的聚合成员的初始值设定项子句列表组成,以递增的下标或成员顺序编写。如果聚合包含子聚合,则此规则递归地应用于子聚合的成员。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)