C++ std::头中的向量大小

C++ std::头中的向量大小,c++,vector,std,C++,Vector,Std,我有一个关于std::vector的小问题。在main.h中,我尝试生成固定大小的int向量 std::vector<int> foo(7); std::vector 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: ex

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

std::vector<int> foo(7);
std::vector 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
。/test/main.h:21:26:错误:数字常量前应有标识符
std::载体foo(7);
../main/main.h:21:26:错误:数字常量前应为“,”或“…”
如何创建固定大小长度的私有向量变量?或者我应该简单地在构造函数中创建

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

for(int i=0;i假设
foo
是数据成员,您的语法无效。通常,您可以像这样初始化T类型的数据成员:

T foo{ctor_args};
还是这个

T foo = T(ctor_args);
但是,
std::vector
有一个构造函数,它接受一个
std::initializer\u list
,这意味着第一种形式将产生一个大小为1的向量,其中单个元素的值为7。因此,您只能使用第二种形式:

std::vector<int> foo = std::vector<int>(7);
std::vector foo=std::vector(7);
如果您使用的是C++11之前的编译器,则需要使用构造函数:

class bar
{
public:
    bar() : foo(7) {}
private:
  std::vector<int> foo;
};
类栏
{
公众:
bar():foo(7){}
私人:
std::矢量foo;
};

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

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

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

class bar
{
public:
    bar() : foo(7) {}
private:
  std::vector<int> foo;
};
(我还建议您对固定值7使用define。如果您将来将其更改为8,您将不必在所有代码中更改值7)

文件.h:

#define YOURCLASSFOOSIZE 7
class yourClass
{
public:
    yourClass(): foo(YOURCLASSFOOSIZE) {}
private:
    std::vector<int> foo;
};
#定义您的ClassFooSize 7
你的班级
{
公众:
yourClass():foo(YOURCLASSFOOSIZE){}
私人:
std::矢量foo;
};
file.cpp:

for(int i=0; i < YOURCLASSFOOSIZE; i++)
{
    foo.push_back(0);
}
for(int i=0;i
谢谢。这对我很有帮助。我正在使用第二个变体。@juanchopanza第一个变体不是使用初始值设定项列表构造函数吗?@UNIm95你做得很好,因为第一个变体在语法上是正确的,但在语义上是“错误的”在这个特殊的例子中。请参阅我的编辑。哦,谢谢。我很幸运地使用了正确的语句。如果您想要一个固定大小的向量,请使用std::array,甚至是一个裸C数组。在“main.h”中?这可能是错误的位置。