为什么在 Visual C++ 2008 中构建结构时会收到这些警告?

2023-11-25

我有这个代码

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(使用前将#替换为@)

为什么在 Visual C++ 2008 中构建结构时会收到这些警告? 的相关文章

随机推荐