向量c ++ 98错误

Har*_*ker 10 c++ vector

所以我一直在阅读多个(和重新发布的)c ++书籍并学习矢量,他们都告诉我要定义一个这样的矢量:

 vector<int> v1 = {4 ,3 ,5}; 
Run Code Online (Sandbox Code Playgroud)

但是当我编译它时(我在代码块中使用gnu gcc编译器)它会出现这个错误

在c ++ 98中,'v1'必须由构造函数初始化,而不是由'{...}'初始化, 并且我还得到另一个那个sais:无法从'大括号封装初始化列表'中转换'{ 4,3,5 }'到'std :: vector v1'

如果你能帮助我,我会非常感激.我确实包括了矢量库.

Moh*_*ain 13

您使用的初始化被调用,initializer list并且从开始支持它.

要确保编译代码,请使用C++11或稍后-std选项.或者一般来说,不要使用C++98.

如果您使用的是g ++,请阅读:使用g ++ 编译C++ 11


来自评论OP正在使用代码块.在点击编译按钮之前,您可以使用以下步骤:(来源:如何向Code :: Blocks编译器添加C++ 11支持?)

  1. 转到工具栏 - >设置 - >编译器
  2. 在"Selected compiler"下拉菜单中,确保选中"GNU GCC Compiler"
  3. 在下面,选择"编译器设置"选项卡,然后选择下面的"编译器标志"选项卡
  4. 在下面的列表中,确保选中"让g ++遵循C++ 11 ISO C++语言标准[-std = c ++ 11]"复选框
  5. 单击"确定"保存


Vla*_*cow 6

C++ 98 Standard不支持初始化列表来初始化标准容器.

尝试根据C++ 2011 Standard设置适当的编译器选项来编译代码.

另一种方法是单独向矢量添加元素

std::vector<int> v1;
v1.reserve( 3 );

v1.push_back( 4 );
v1.push_back( 3 );
v1.push_back( 5 );
Run Code Online (Sandbox Code Playgroud)

push_back您可以使用重载运算符代替成员函数+=.例如

std::vector<int> v1;
v1.reserve( 3 );

v1 += 4;
v1 += 3;
v1 += 5;
Run Code Online (Sandbox Code Playgroud)

或者使用类似的数组

const size_t N = 3;
int a[N] = { 4, 3, 5 };
std::vector<int> v1( a, a + N );
Run Code Online (Sandbox Code Playgroud)