为什么我不能在声明它时初始化结构中的向量成员?

时间:2012-01-08 14:13:03

标签: c++ stl g++

struct comp {
    long a;
    vector<int> b(9);
    bool c;
};

错误:

code.cpp:67:19: error: expected identifier before numeric constant
code.cpp:67:19: error: expected ‘,’ or ‘...’ before numeric constant

这有什么问题?如果我说b将有9个元素,为什么g ++不接受?

2 个答案:

答案 0 :(得分:10)

因为C ++不能像那样工作。

初始化器位于构造函数的初始化列表中,例如

struct comp {
    long a;
    vector<int> b;
    bool c;

    comp() : b(9) { }
};

(请注意,这样定义的类不再是聚合。)

注意:C ++ 11添加了成员​​初始值设定项,但只使用了复制初始化语法:

struct Foo {
    int a = 5;
    vector<char> b = vector<char>(8);
};

编译器对此的支持仍然不完整。

答案 1 :(得分:0)

vector<int> b(9);是一个具体的数据结构。它正在寻找类型和标签,而不是实际的数据结构。应该只需要vector<int> b;