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

Why can't I initialize a vector member in a structure while declaring it?

本文关键字:结构 向量 成员 不能 声明 为什么 初始化      更新时间:2023-10-16
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 g++ 将有 9 个元素,为什么 g++ 不接受?

因为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);
};

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

vector<int> b(9);是一个

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