Class 大括号括起来的初始化列表失败
Class brace-enclosed initializer list fails
我在初始化时遇到问题 class:
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++。
class 不应该是手写的,但我知道这些值是正确的,只是想将 table 作为全局值。无需任何额外的内部调用即可获得最终的 table 值。
结构成员的大括号初始化仅在未声明用户定义的构造函数时可用。由于 Table
有一个用户定义的默认构造函数,您不能直接初始化成员(以防止用户代码构造 class 的实例,而构造函数本身不是 运行 ).
顺便说一句,函数定义后不需要分号。
编辑:结合 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 对 class 成员初始值设定项的支持,以及 C++14 对带有成员初始值设定项的 classes 的花括号初始化的支持。
我在初始化时遇到问题 class:
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++。
class 不应该是手写的,但我知道这些值是正确的,只是想将 table 作为全局值。无需任何额外的内部调用即可获得最终的 table 值。
结构成员的大括号初始化仅在未声明用户定义的构造函数时可用。由于 Table
有一个用户定义的默认构造函数,您不能直接初始化成员(以防止用户代码构造 class 的实例,而构造函数本身不是 运行 ).
顺便说一句,函数定义后不需要分号。
编辑:结合 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 对 class 成员初始值设定项的支持,以及 C++14 对带有成员初始值设定项的 classes 的花括号初始化的支持。