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&lt;string&gt; test = "hello", "world",但这给了我以下错误:

Error: initialization with '...' is not allowed for an object of type "std::vector&lt;std::string, std::allocator&lt;std::string&gt;&gt;


为什么会收到错误消息? 关于如何存储字符串有什么想法吗?

【问题讨论】:

将编译器升级到支持 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::strings,并用它来初始化向量。

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> 初始化?的主要内容,如果未能解决你的问题,请参考以下文章

向量中不存在 C++ 字符串成员变量

在 VS Code 中,禁用错误“JSON 中不允许评论”

发布在构建定义 VS2012 中不起作用

成员声明中不允许使用 C++ 限定名称

向量元素在分区算法中不交换。

性能 - 使用迭代器或指针迭代向量?