std::vector 尺码 header

std::vector size in header

我有一个关于 std::vector 的小问题。在 main.h 中,我尝试制作固定大小的 int 向量

std::vector<int> foo(7);

但是 g++ 给出了这个错误:

../test/main.h:21:26: error: expected identifier before numeric constant
 std::vector<int> foo(7);
../main/main.h:21:26: error: expected ',' or '...' before numeric constant

如何创建固定大小长度的私有向量变量?或者我应该简单地在构造函数中创建

for(int i=0; i<7;i++){
    foo.push_back(0);
}

假设 foo 是一个数据成员,你的语法是无效的。一般来说,你可以像这样初始化一个T类型的数据成员:

T foo{ctor_args};

或这个

T foo = T(ctor_args);

然而,std::vector<int> 有一个采用 std::initializer_list<int> 的构造函数,这意味着第一种形式将产生一个大小为 1 的向量,其中单个元素的值为 7。所以你被困住了第二种形式:

std::vector<int> foo = std::vector<int>(7);

如果您受困于 C++11 之前的编译器,则需要使用构造函数:

class bar
{
public:
    bar() : foo(7) {}
private:
  std::vector<int> foo;
};

并注意在所有构造函数中初始化向量(如果适用。)

初始化 class 成员(内置类型除外)的最有效方法是使用初始化列表。

所以这里最好的解决方案是在 class 构造函数的初始化列表中构造长度为 7 的向量:

(我还建议您为固定值 7 使用定义。如果您将来将其更改为 8,则无需在所有代码中更改值 7)

file.h:

#define YOURCLASSFOOSIZE 7
class yourClass
{
public:
    yourClass(): foo(YOURCLASSFOOSIZE) {}
private:
    std::vector<int> foo;
};

file.cpp :

for(int i=0; i < YOURCLASSFOOSIZE; i++)
{
    foo.push_back(0);
}