提问人:nuchyobitva 提问时间:11/16/2023 最后编辑:nuchyobitva 更新时间:11/16/2023 访问量:111
为什么我不能明显地初始化类中一定长度的向量?[复制]
Why can't i initialize vector of certain length in a class obviously? [duplicate]
问:
我正在尝试使用首选大小初始化向量,但 visual studio 给出错误 C2059。
class Solution {
private:
vector<int> firsttosee(26);
};
我读过这篇文章,但在回答中,作者提到:
类定义中成员的语法不允许使用初始值设定项的 () 括号样式。(我不太确定为什么。
请帮助理解为什么明显的向量初始化在类中不起作用
答:
3赞
Remy Lebeau
11/16/2023
#1
错误 C2059 是语法错误。
正如链接的答案清楚地指出的那样,标准的 C++ 语法根本不允许您从类声明内部直接初始化类成员,因此会出现错误。()
但是,您可以使用构造函数的成员初始值设定项列表中的成员,例如:()
class MyClass {
public:
vector<int> myvec;
MyClass() : myvec(26) {}
};
或者,从 C++11 开始,您可以在类成员声明 1 中使用,例如:{}
class MyClass {
public:
vector<int> myvec{26};
};
1:这实际上有点问题,因为它实际上会调用构造函数而不是构造函数,因此您保留 1 个值为 26 的元素,而不是保留 26 个值为 0 的元素。std::vector
std::initializer_list
size_t
vector
否则,您可以使用它创建一个单独的对象,然后用它初始化类成员,例如:()
class MyClass {
public:
vector<int> myvec = vector<int>(26);
};
评论
0赞
nuchyobitva
11/16/2023
所以你的意思是它只是编译器中不允许的规则?没有解释为什么不允许?对我来说似乎很奇怪,对不起好奇。
1赞
Ted Lyngmo
11/16/2023
@nuchyobitva 这是语言的规则。多年来,初始化规则发生了许多变化。我敢肯定我们还没有看到最后的更改:-)
0赞
Ted Lyngmo
11/16/2023
“已经发生了很多变化” - 在那里插入一个,它可能会更有意义。睡觉时间:-)
评论
()
vector<int> myvec();
{value}
= value