我对std :: vector有一个小问题。在main.h中,我尝试使用固定大小的int vector
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);
}
答案 0 :(得分:2)
假设foo
是数据成员,则语法无效。通常,您可以像这样初始化类型为T的数据成员:
T foo{ctor_args};
或者
T foo = T(ctor_args);
但是,std::vector<int>
有一个带std::initializer_list<int>
的构造函数,这意味着第一个形式会产生一个带有单个元素值为7的size-1向量。所以你被困在第二个形式:
std::vector<int> foo = std::vector<int>(7);
如果你遇到了一个pre-C ++ 11编译器,你需要使用一个构造函数:
class bar
{
public:
bar() : foo(7) {}
private:
std::vector<int> foo;
};
并注意在所有构造函数中初始化向量(如果适用)。
答案 1 :(得分:0)
初始化类成员(除了内置类型)最有效的方法是使用初始化列表。
所以这里最好的解决方案是在类构造函数的启动列表中构造长度为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);
}