c++ 为什么我不能在一个类中初始化某个长度的向量?[重复]

noj0wjuj  于 2023-11-19  发布在  其他
关注(0)|答案(1)|浏览(105)

此问题在此处已有答案

How to initialize a vector to a certain length in a class?(2个答案)
Why class data members can't be initialized by direct initialization syntax?(1个答案)
3天前关闭。
我试图初始化一个向量的首选大小,但Visual Studio给出了一个错误C2059。

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

字符串
我读过this article,但在答案中作者提到:
类定义中的成员语法不允许初始化器的()括号样式(我不确定为什么)。
请帮助理解,为什么明显的向量初始化在类中不起作用

0pizxfdo

0pizxfdo1#

错误C2059是一个语法错误。
正如linked answer明确指出的那样,标准C++语法不允许使用()直接从类声明内部初始化类成员,因此您的错误。
但是,您可以使用()初始化constructor's member initializer list中的成员,例如:

class MyClass {
public:
    vector<int> myvec;

    MyClass() : myvec(26) {}
};

字符串
或者,从C++11开始,你可以在类成员声明1中使用{},例如:

class MyClass {
public:
    vector<int> myvec{26};
};


一曰:这对于std::vector来说实际上有点问题,因为它实际上会调用std::initializer_list构造函数,而不是size_t构造函数,从而使vector包含1个值为26的元素,而不是包含26个值为0的元素。
否则,您可以使用()创建一个单独的对象,然后使用它初始化类成员,例如:

class MyClass {
public:
    vector<int> myvec = vector<int>(26);
};

相关问题