non-aggregates(非聚合)对象不能使用初始化列表
2014-12-06 17:24
260 查看
non-aggregates cannot be initialized with initializer list
这个错误。
来源:
假设定义这样一个结构体
[cpp] view
plaincopy
struct T_A
{
int iX;
int iY;
T_A() { iX = iY = 0; }
};
以下使用的初始化方法
[cpp] view
plaincopy
T_A tA = { 2, 1 };
则会报出non-aggregates cannot be initialized with initializer list
这里产生的原因是T_A存在构造函数,因此不能使用初始化列表。
如果没有构造函数
[cpp] view
plaincopy
struct T_A
{
int iX;
int iY;
};
T_A tA = { 2, 1 };
则会正常编译通过,不会报错。
实际上,并不只有上面这个例子的情况下才会产生这种问题。
对于non-aggregates(非聚合对象),不能使用初始化列表。只有聚合对象才可以这样使用。
而聚合对象定义为:
1. 数组
2. 不包含 ( 构造函数、private和protect、基类、虚函数 )的类、结构体和联合体
也就是说,不满足聚合对象定义而使用初始化列表都会产生这样的错误。使用时需注意。
这个错误。
来源:
假设定义这样一个结构体
[cpp] view
plaincopy
struct T_A
{
int iX;
int iY;
T_A() { iX = iY = 0; }
};
以下使用的初始化方法
[cpp] view
plaincopy
T_A tA = { 2, 1 };
则会报出non-aggregates cannot be initialized with initializer list
这里产生的原因是T_A存在构造函数,因此不能使用初始化列表。
如果没有构造函数
[cpp] view
plaincopy
struct T_A
{
int iX;
int iY;
};
T_A tA = { 2, 1 };
则会正常编译通过,不会报错。
实际上,并不只有上面这个例子的情况下才会产生这种问题。
对于non-aggregates(非聚合对象),不能使用初始化列表。只有聚合对象才可以这样使用。
而聚合对象定义为:
1. 数组
2. 不包含 ( 构造函数、private和protect、基类、虚函数 )的类、结构体和联合体
也就是说,不满足聚合对象定义而使用初始化列表都会产生这样的错误。使用时需注意。
相关文章推荐
- non-aggregates(非聚合)对象不能使用初始化列表
- non-aggregates(非聚合)对象不能使用初始化列表
- non-aggregates(非聚合)对象不能使用初始化列表
- VS2008使用大事记之一:Automation服务器不能创建对象
- 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
- Symbian中不能跨越线程(RThread)使用的对象/组件(RSocket/Memery Heap,etc)
- jsp中如果带有头文件 不能使用document.boy对象必须改为document.documentElement.
- 使用VS2003创建WEB程序的时候出现"AutoMation服务器不能创建对象"错误
- 对象与null对比不能使用equals,必须使用==
- c++构造函数不能使用本class对象作为参数
- Quartz不能直接使用已有对象实例的解决办法
- A类不能实例化,但B类需要使用A类对象的设计策略
- 使用Visual Studio.Net,系统报告“automation服务器不能创建对象”错误。解决之道运行:regsvr32 scrrun.dll 就可以了。
- 64位操作系统使用7.0版winiis系统,报ActiveX 部件不能创建对象问题!
- 使用ScriptX进行Web打印提示:factory.printing为空或不是对象,不能打印
- javascript 直接创建对象与间接创建对象 私有函数不能访问this变量 是否使用var声明变量几个问题探讨
- 使用IShellFolder::EnumObjects()不能正确枚举虚目录“我的电脑”下的对象,为什么?
- ASP中使用FSO提示“Automation服务器不能创建对象”的问题
- 使用aspnet_regsql.ext命令行工具后,就不能用sql语句创建新的表了,总是显示已存在XXX对象。
- 为何使用WEBBROWSER的对象CLICK事件不能生效