我是C ++的新手,正在尝试学习矢量的概念。但是,当我运行以下代码时:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(){
vector<string> vs1 = {"a", "an", "the"};
return 0;
}
IDE输出错误消息:
error: non-aggregate type 'vector<string>' cannot be initialized with an initializer list
vector<string> vs1 = {"a", "an", "the"};
^ ~~~~~~~~~~~~~~~~~~
我认为新的C ++标准允许从花括号中包含的零个或多个初始元素值列表中初始化一个向量。那么为什么会出现错误消息?
P.s - 使用auto(在c ++ 11中也引入)在我的NetBean IDE上很好用
答案 0 :(得分:6)
该错误来自clang编译器,但仅当您编译为C ++ 98 / C ++ 03时,这意味着您没有编译为C ++ 11。
P.s - 使用auto(在c ++ 11中也引入)在我的NetBean IDE上很好用
(你的IDE并不重要,编译器不能编译代码)。
Clang在C ++ 98模式下允许auto
,但会发出警告:
prog.cc:8:5: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
所以你需要
启用C ++ 11模式
停止忽略警告