类大括号括起来的初始值设定项列表失败
Class brace-enclosed initializer list fails
我在初始化这个类时遇到问题:
class Table{
public:
long r;
long c;
int g;
int q;
std::vector<std::vector<long> > data;
//Helper Methods
Table(){r=-1;c=-1;g=-1; q=-1;data.clear();};
double rate(void) const {...};
bool check(void) const {...};
void q_auto(void){q = r / g;};
};
如果我尝试这样做:
static Table my_table = {16200, 10800, 360, 30, {{1,3},{2,5}}};
它只是失败,并显示:
error: could not convert ‘{16200, 10800, 360, 30, {{1, 3}, {2, 5}}}’ from ‘<brace-enclosed initializer list>’ to ‘Table’
我确实有C++11。那么,那里有什么问题呢?我尝试使用额外的牙套,但没有运气....我正在使用 g++。
该类不应该是手写的,但我知道值是正确的,只想将表作为全局值粘贴。无需任何额外的内部调用即可获取最终表值。
结构成员的大括号初始化仅在未声明用户定义的构造函数时可用。由于Table
具有用户定义的默认构造函数,因此不允许直接初始化成员(以防止用户代码在不运行构造函数本身的情况下构造类的实例)。
顺便说一下,函数定义后不需要分号。
编辑:结合iammilind的建议,支持成员默认初始化为-1以及大括号初始化的好方法如下:
class Table{
public:
long r = -1;
long c = -1;
int g = -1;
int q = -1;
std::vector<std::vector<long> > data;
double rate(void) const {...}
bool check(void) const {...}
void q_auto(void){q = r / g;}
};
这依赖于对类成员初始值设定项的 C++11 支持,以及对具有成员初始值设定项的类的大括号初始化的 C++14 支持。
相关文章:
- 使用显式模板参数列表和 [temp.arg.explicit]/3 的函数调用的演绎失败
- 使用大括号初始值设定项列表时,模板参数推断失败
- 从 std::vector<double> 到 Python 列表的转换失败(提升 python)
- C++ 链表合并排序的实现在连接 1 个以上节点的子列表时失败
- 嵌套列表(字符串向量的向量)初始化失败
- 使用初始值设定项列表初始化结构,对于 std::array 失败
- 简单的链接列表删除失败
- std::list::merge() 对于包含对象的列表失败
- 断言失败,列表迭代器不可取消引用
- 使用链接列表实现堆栈,调试断言失败
- 为什么我的列表中的迭代失败
- 类大括号括起来的初始值设定项列表失败
- 在stl列表中调用构造函数失败
- 从初始化器列表初始化unique_ptrs的容器失败,GCC为4.7
- Visual Studio 2012 c++构建失败,但错误列表或输出中没有任何内容
- 调试断言失败!表达式列表迭代器不兼容
- 堆栈列表调试断言失败c++
- 模板初始化列表-查找失败的原因
- Windows 10的跳转列表失败
- C++11初始值设定项列表失败,但仅适用于长度为2的列表