gpt4 book ai didi

c++ - 如何在类定义中初始化 vector 成员变量?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:16:17 33 4
gpt4 key购买 nike

以下代码可以使用 XCode 5.0 编译,但不能使用 Visual Studio 2013。

#include <vector>

class VectorInit
{
private:
std::vector<int> m_vector{1, 2, 3}; // fails to compile using VS 2013
};

int main()
{
std::vector<int> vector{1, 2, 3};

VectorInit vectorInit;

return 0;
}

这是 Visual Studio 报告的错误:

Error   1   error C2664: 'std::vector<int,std::allocator<_Ty>>::vector(std::initializer_list<int>,const std::allocator<_Ty> &)' : cannot convert argument 3 from 'int' to 'const std::allocator<_Ty> &' c:\visual studio 2013\projects\vector-init\main.cpp 6   1   vector-init

我还没有设法找到一个例子来说明如何在类定义中初始化这样一个 vector 。

哪个编译器是正确的?

如果语法无效,是否是构造函数初始化列表中初始化 m_vector 的唯一选项?

最佳答案

在类中成员初始化是在 VS2013 中首次亮相的 c++11 功能。但是当成员是一个聚合时,编译器就会出现错误并尝试使用复制构造函数。它也忽略采用初始化列表的构造函数,并尝试仅将参数与常规构造函数参数匹配。

解决方法是,您可以创建一个临时 vector ,然后使用该语法移动,直到编译器进行适当更新。

class VectorInit
{
private:
std::vector<int> m_vector { std::vector<int>{ 1, 2, 5, 7 } };
};

关于c++ - 如何在类定义中初始化 vector 成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21573143/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com