矢量c++98错误

Vector c++ 98 error

本文关键字:错误 c++98 矢量      更新时间:2023-10-16

所以我读了很多(最近)c++书,学习了向量,他们都告诉我要定义这样的向量:

 vector<int> v1 = {4 ,3 ,5}; 

然而,当我编译它时(我在代码块中使用gnu-gcc编译器),它会出现以下错误

在c++98中,"v1"必须由构造函数初始化,而不是由"{…}"初始化我还得到了另一个下面写着:无法将"{4,3,5}"从"包含大括号的初始值设定项列表"转换为"std::vector v1"

如果你能帮助我,我将不胜感激我确实包含了向量库

您使用的初始化称为initializer list,它在c++11以后受到支持。

要确保代码已编译,请使用C++11或更高版本的-std选项。或者一般情况下,不要使用C++98

如果你正在使用g++,请阅读:用g++编译C++11


来自注释OP正在使用代码块。在点击编译按钮之前,您可以使用以下步骤:(来源:How can I add C++11 support to Code::Blocks compiler?)

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

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

尝试设置适当的编译器选项,以便根据C++2011标准编译代码。

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

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

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

std::vector<int> v1;
v1.reserve( 3 );
v1 += 4;
v1 += 3;
v1 += 5;

或者使用类似的阵列

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

在makefile的行末尾使用-std=c++11编译器选项进行编译。

例如:

g++ -ggdb -O0 -c ENiX_Chocky.cpp -std=c++11
g++ -ggdb -O0 -c ENiX_NLPTest.cpp -std=c++11
...

然后当你链接时,再次使用-std=c++11选项:

g++ -ggdb -O0 ENiX_Chocky.cpp ENiX_NLPTest.cpp -o CLINLPTest.cpp -std=c++11

错误将立即消失。

如果使用代码块,请执行以下步骤:

1.转到工具栏->设置->编译器

2.在"选定编译器"下拉菜单中,确保选择了"GNU GCC编译器"。

3.在下面,选择"编译器设置"选项卡,然后选择下面的"编译器标志"选项卡。

4.在下面的列表中,确保选中"让g++遵循C++11 ISO C++语言标准[-std=C++11]"框。

5.单击"确定"保存

Intalizer_list仅在c++11及以后版本上受支持。

编译你的程序如下:

  1. 如果您使用的是c++11功能,请遵循-std=c++11选项
  2. 如果您使用的是c++14功能,请遵循-std=c++14选项

例如:

gcc Temp.cpp -std=c++11 -o out_put
gcc Temp.cpp -std=c++14 -o out_put