我有这个代码
typedef struct
{
const char* fooString;
const bool fooBool;
}fooStruct;
这个初始化器:
static const fooStruct foo[] =
{
{"file1", true},
{"file2", false},
....
};
使用这段代码,我在 VS2008 中有 3 个警告:
error C2220: warning treated as error - no 'object' file generated
warning C4510: '<unnamed-tag>' : default constructor could not be generated
warning C4512: '<unnamed-tag>' : assignment operator could not be generated
warning C4610: struct '<unnamed-tag>' can never be instantiated - user defined constructor required
这正是编译器所说的:它无法为您的结构生成默认构造函数或赋值运算符,因为它有一个const
其中的成员(const bool fooBool
)。结构体成员是const
或 哪些引用不能默认初始化,因此必须在用户编写的构造函数或赋值运算符中显式初始化它们。
一种解决方案是编写自己的默认构造函数和赋值运算符(并符合三法则,你还应该写一个复制构造函数;析构函数并不是绝对必要的,但是一个很好的做法)。另一种更简单的解决方案是fooBool
non-const
。然后,编译器会很乐意为您生成默认的构造函数和赋值运算符。
由于您已经创建了一个数组const
这些实例与static const fooStruct foo[] = ...
, 额外的const
on fooBool
毫无意义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)