c++ - 初始化一个字符串 vector ,我已经知道所有值以用 C++ 填充它

标签 c++ vector

<分区>

在向你们寻求帮助之前,我已经花了一个多小时研究这个问题。我使用的是 visual studio 2012,我刚刚安装了更新 2。

我有这个构造函数

Lexer::Lexer(istream &source1, ostream& listing1)
:source(source1), listing(listing1)
{
vector<string> tempVec = { 
    "and", "begin", "boolean", "break", "call", "end", "else", "false", "halt",
        "if", "input", "integer", "is", "loop", "not", "null", "newline", "or", "output", "procedure"
        "return", "then", "true", "var"
};




tokenToStringVector = tempVec;

for (int k= 0; k < tokenToStringVector.size(); k++)
{
    string key = tokenToStringVector[k];
    lexemeToTokenMap[key] = Token(k); // Function-style type cast
}
}

我的教授写了标题,我写了代码。我收到这个我无法弄清楚的错误:

1>c:\users\sam\dropbox\compiler project\lexical analyzer\lexer.cpp(8): error C2552: 'tempVec' : non-aggregates cannot be initialized with initializer list
1>          'std::vector<_Ty>' : Types with a base are not aggregate
1>          with
1>          [
1>              _Ty=std::string
1>          ]

我不明白为什么它不让我这样初始化它。我可以创建一个数组,然后创建一个循环以添加到 vector 中,但我已经只是使用 vector 来填充 map ,因此必须有一种更合乎逻辑的方法来执行此操作。

非常感谢!你们总是那么乐于助人!

请注意:如果答案不是简单的格式错误,请不要更正代码,只需指出正确的方向即可。这是一项评分作业,我是一个诚实的学生,我想自己学习。


好的,从回复和重新阅读某人发布的 SO 帖子来看。

  1. Visual Studio 不支持它,即使它在 C++ 2011 中有效

谢谢大家,我想我只需要制作一个数组。

我的教授告诉我这样做与此类似,他使用了一些支持此功能的 Linux gcc 编译器。

编辑:好的,所以微软有一个支持这个的 alpha 版本。我想我会制作一个数组并传输它。

感谢您的帮助!!!!

最佳答案

vc++不支持初始化列表。
不知道update 2支持不支持,就算有,标准库也肯定不支持。

编辑:更新 2 也不支持初始化列表。

关于c++ - 初始化一个字符串 vector ,我已经知道所有值以用 C++ 填充它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16087886/

相关文章:

C++ Dlib load_image_dataset 问题

c++ - 为什么未正确推导 boost::fusion 序列中的结构数组成员类型?

c++ - 如何在 beginNativePainting() 中翻转纹理?

结构的c++ vector 和从文件中读取

matlab - 在另一个向量 matlab 中查找向量的一部分

join - 如何加入两个Options<Vec<String>>

c++ - 从现有数组初始化 vector

c++ - 基类中的虚拟无关方法导致MSVC编译失败时的模板类方法实例化

c++ - 取消定义和重新定义 __cplusplus 宏

haskell - Data.Vector.Mixed 的用途