为什么我不能明显地初始化类中一定长度的向量?[复制]

Why can't i initialize vector of certain length in a class obviously? [duplicate]

提问人:nuchyobitva 提问时间:11/16/2023 最后编辑:nuchyobitva 更新时间:11/16/2023 访问量:111

问:

我正在尝试使用首选大小初始化向量,但 visual studio 给出错误 C2059。

class Solution {
private:
    vector<int> firsttosee(26);
};

我读过这篇文章,但在回答中,作者提到:

类定义中成员的语法不允许使用初始值设定项的 () 括号样式。(我不太确定为什么。

请帮助理解为什么明显的向量初始化在类中不起作用

C++ 向量 初始化

评论

0赞 Vlad from Moscow 11/16/2023
@user4581301 他不能对类成员使用这样的初始化。他需要使用大括号或相等的初始化,例如vector<int>myvec{26};
3赞 BoP 11/16/2023
的用法仅用于声明成员函数。 是一个返回向量的函数。对于数据成员,您可以使用 或()vector<int> myvec();{value}= value

答:

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::vectorstd::initializer_listsize_tvector

否则,您可以使用它创建一个单独的对象,然后用它初始化类成员,例如:()

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
“已经发生了很多变化” - 在那里插入一个,它可能会更有意义。睡觉时间:-)