C++ 类初始值设定项列表失败

C++ 类初始值设定项列表失败,c++,c++11,initialization,C++,C++11,Initialization,我在初始化此类时遇到问题: 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 chec

我在初始化此类时遇到问题:

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;};
};
它只是在以下方面失败:

error: could not convert ‘{16200, 10800, 360, 30, {{1, 3}, {2, 5}}}’ from ‘<brace-enclosed initializer list>’ to ‘Table’
错误:无法将“{16200,10800,360,30,{{1,3},{2,5}}}”从“”转换为“表”
我有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;}
};
类表{
公众:
长r=-1;
长c=-1;
int g=-1;
int q=-1;
std::矢量数据;
双速率(无效)常数{…}
布尔检查(无效)常量{…}
void q_auto(void){q=r/g;}
};

这依赖于C++11对类成员初始值设定项的支持,以及C++14对具有成员初始值设定项的类的大括号初始化的支持。

是的,我只是在写我自己的答案,你只比我快了30秒:p我将在5分钟内接受它minutes@DarkZeros,补充这个答案,我建议您可以使用
-1
初始化成员变量以获得默认值。虽然您不需要在函数定义后使用分号,但正如前面所说,在类定义后确实需要分号。是的,我知道,我只是复制粘贴而忽略了这一点,但我的代码确实有效。谢谢使用NSDMIs,您需要C++14来使用聚合初始化。
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;}
};