以下代码使用XCode 5.0而不是Visual Studio 2013编译OK。
#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
我还没有找到如何在类定义中初始化矢量的示例。
哪个编译器正确?
如果语法无效,是否是在构造函数初始化程序列表中初始化m_vector的唯一选项?
在课堂上,成员初始化是c ++ 11的功能,首次亮相VS2013。但是,当成员是聚合成员时,编译器会出现问题,请尝试使用复制构造函数。它也忽略采用构造函数列表的构造函数,并尝试仅将参数与常规构造函数参数匹配。
解决方法是,您可以创建一个临时向量,然后使用该语法移动,直到对编译器进行适当的更新。
class VectorInit
{
private:
std::vector<int> m_vector { std::vector<int>{ 1, 2, 5, 7 } };
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句