【问题标题】:ERROR: ISO C++ forbids initialization in array new错误:ISO C++ 禁止在新数组中初始化
【发布时间】:2013-06-22 13:34:15
【问题描述】:

以下是我的代码:

#include<iostream.h>
#include<conio.h>
int main()
{
int *x= new int[10] (0,1,2,3,4,5,6,7,8,9);//error observed here
for(int i=0;i<9;i++)
{
    cout<<x[i];
}
delete[] x;
getch();
return 0;
}

我得到 ISO C plus plus 禁止在数组新错误中初始化 请让我知道这个错误的来源。谢谢

【问题讨论】:

  • 如果你知道数组的内容,用int x[] = { 0, ... };在栈上初始化它,也可以用static...
  • 当您开始使用较新的编译器时,请跳过使用new 并改用std::vector,例如:std::vector&lt;int&gt; x{0,1,2,3,4,5,6,7,8,9};。这让您也可以跳过使用delete

标签: c++ compiler-errors dev-c++


【解决方案1】:

uniform initialization 的 C++ 中,您必须使用括号:

int *x= new int[10] {0,1,2,3,4,5,6,7,8,9};

【讨论】:

  • 现在它说:预期,' or ;'在同一行的“{”标记之前。
  • 在 ideone 上运行良好。是的,我想是时候买一个新的编译器了。谢谢
  • @user2492461 dev c++ 中的编译器可能不支持 C++11
  • @user2492461 Dev-C++ 附带的默认编译器据说已经过时了。您可以安装一个新的编译器并使用它来代替环境。重要的部分是将 -std=c++11 标志添加到编译器,以启用统一初始化(因为它是 C++11 标准中的新功能)。
【解决方案2】:

在构造 x 时使用括号意味着将参数传递给数组构造函数。改用大括号为数组值提供初始化器。

【讨论】:

    猜你喜欢
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    相关资源
    最近更新 更多