作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
以下代码可以使用 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/
我是一名优秀的程序员,十分优秀!