这让我绕弯道。关于向量的所有文档都非常深刻。
在一个类中,我想声明一个长度等于我已经声明的字符串长度的向量。这听起来很容易。
如果我使用:
class Test {
private:
size_t size = 10;
std::vector<int> array(size);
};
我得到&#34;只有静态const积分数据成员可以在一个类中初始化&#34;
如果我:
std::vector<int> array(anarray.length());
我得到了非常无益的帮助:
错误C2061:语法错误:标识符&#39; anarray&#39;
我该怎么做?
答案 0 :(得分:3)
类内初始化需要使用type var = value;
语法或统一初始化语法。
根据您的需要,使用type var = value;
语法更为合适。
class Test {
private:
std::size_t size = 10;
std::vector<int> array = std::vector<int>(size);
};
您可以使用
初始化size
std::size_t size{10};
但是,如果你使用
std::vector<int> array{size};
它会尝试使用一个包含值std::vector
的元素创建size
。那不是你感兴趣的。
答案 1 :(得分:1)
根据评论中的点点滴滴判断出不同的答案,我发现OP不使用C ++ 11而且不需要动态数组功能。因此,我的建议是选择好的C风格静态数组。以下代码可以解决问题:
struct Test {
static const size_t array_sz = 10;
int my_array[array_sz];
};
如果作为来自愚蠢的CS老师的任务的性质,std::vector
是强制性的,那就应该如何初始化:
struct Test {
static const size_t array_sz = 10;
std::vector<int> my_array;
Test() : my_array(array_sz) {}
};
说明:std::vector
需要构造并使用某个参数来指定它的大小。预调用C ++ 11调用成员变量的特定构造函数的唯一方法是在封闭类的构造函数的所谓初始化列表中执行此操作。
在C ++ 11之后,这也可以直接在成员定义的站点中完成。但是你需要一个不到6年的编译器。
答案 2 :(得分:0)
像这样:(需要c ++ 11或更高版本)
class Test {
private:
size_t size = 10;
std::vector<int> array = std::vector<int>(size);
};
答案 3 :(得分:0)
只需声明std::vector<int> array
,如果你想要你的矢量不大,那么一个特定的大小就会创建一个在插入前检查矢量大小的方法。
答案 4 :(得分:0)
数据成员通常在成员初始化列表中初始化:
class Test
{
std::vector<int> array;
public:
Test() : array(10)
{ // ^^^^^^^^^
}
};
答案 5 :(得分:-2)
摆脱(size)
。向量在其存在至少一个实例之前不具有或必须具有长度。向量中的元素数量不是其类型的一部分。 std::vector<int>
不能包含整数或一百个整数 - 它仍然是std::vector<int>
。当声明向量是类的成员时,该向量的实例将具有的成员数(稍后存在时)并不重要。