VS2012 中不允许使用 ... 进行向量<string> 初始化?
Posted
技术标签:
【中文标题】VS2012 中不允许使用 ... 进行向量<string> 初始化?【英文标题】:vector<string> initialization with ... is not allowed in VS2012?VS2012 中不允许使用 ... 进行向量<string> 初始化? 【发布时间】:2014-06-01 06:18:00 【问题描述】:我想知道如何在 Visual Studio Ultimate 2012 中初始化 std::vector
字符串,而不必使用一堆 push_back
。
我尝试过vector<string> test = "hello", "world"
,但这给了我以下错误:
Error: initialization with '...' is not allowed for an object of type "std::vector<std::string, std::allocator<std::string>>
为什么会收到错误消息? 关于如何存储字符串有什么想法吗?
【问题讨论】:
将编译器升级到支持 C++11 的版本 什么@Brian said VS2012 不支持列表初始化。 Nov CTP 版本可以,但它仍然没有为标准库类型提供适当的构造函数。所以你必须升级到 VS2013。 【参考方案1】:问题
如果您想使用您的 sn-p 中的内容,您必须升级到更新的编译器版本(和标准库实现)。
VS2012 doesn't support std::initializer_list
,这意味着您尝试使用的 std::vector
的构造函数之间的重载根本不存在。
换句话说;该示例无法使用 VS2012 编译。
msdn.com - Support For C++11 Features (Modern C++)可能的解决方法
使用中间数组来存储std::string
s,并用它来初始化向量。
std::string const init_data[] =
"hello", "world"
;
std::vector<std::string> test (std::begin (init_data), std::end (init_data));
【讨论】:
【参考方案2】:1.为什么我会收到错误消息? Visual Studio 2012 不支持在2012 November update 之前根据此question 进行列表初始化。
2.关于如何存储字符串有什么想法吗?
使用 push_back() 是一个完全有效的解决方案。示例:
#include<vector>
#include <string>
using namespace std;
int main()
vector<string> test;
test.push_back("hello");
test.push_back("world");
for(int i=0; i<test.size(); i++)
cout<<test[i]<<endl;
return 0;
【讨论】:
以上是关于VS2012 中不允许使用 ... 进行向量<string> 初始化?的主要内容,如果未能解决你的问题,请参考以下文章