繁体   English   中英

类括号括起初始化列表失败

[英]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 ++。

这堂课不应该是手写的,但我知道价值是正确的,只是想把桌子作为全球价值。 没有任何额外的内部调用来获取最终表值。

只有在未声明用户定义的构造函数时,才能使用struct成员的Brace初始化。 由于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支持使用成员初始化程序对类进行大括号初始化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM