【问题标题】:array not being created due to variable size由于大小可变,未创建数组
【发布时间】:2016-03-10 09:14:55
【问题描述】:

我收到与数组大小有关的错误,错误是:

line 19: expression did not evaluate to a constant <br/>
line 31: array type 'int[*n]' is not assignable <br/>
line 34: array type 'int[*n]' is not assignable <br/>


#include "stdafx.h"
#include "iostream"

int main()
{

    using namespace std;
    int x=0;
    int cst=0;
    int cstF=0;
    int rst=0;
    int n=1;

    cout << "insira o numero de consultas" << endl;
    cin >> n;

    int hora[2 * n];

    for (x = 0; x == 2 * n - 2; x += 2) 
    {
        cout << "insira o horario de inicio" << endl;
        cin >> cst;
        if (hora[x - 2] < cst && hora[x - 1] > cst)
            rst = rst;
        else
        {
           rst = rst + 1;
        }
        hora[x] = cst;
        cout << "insira o horario de termino" << endl;
        cin >> cstF;
        hora[x + 1] = cstF;
    }
    cout << "o numero de consultas possiveis eh: " << rst << endl;
    return 0;
}

我真的很感激我为什么会出错。

【问题讨论】:

  • 可变长度数组是一个扩展,而不是 c++ 标准。如果您需要可变长度数组,请改用std::vector
  • 我认为错误信息很清楚!你的数组大小需要是一个(编译时)常量,并且你给它一些只有在运行时才知道的值。也许您正在寻找std::vector
  • 还有一些文体要点现在要掌握,以免它们太嵌入且难以消除:标准库头文件应包含在&lt;&gt; 中,例如#include &lt;iostream&gt; - 这个告诉系统查找正确的位置,而不是先检查本地目录。另外,请重新考虑您对通常被认为是不良做法的使用:using namespace std;endl(这些是解释的链接)。
  • 如果你想使用 int 数组:int *hora = new int [2*n]; 并在代码末尾:delete hora;
  • 另外,hora[x - 2]hora[x - 1]x 为 0 或 1 时将不起作用。

标签: c++


【解决方案1】:

您不能使用变量作为大小静态分配数组;

int n;
int hora[n]; //won't compile

您可以使用动态内存分配:

int n;
int* hora = malloc(sizeof(int)*n);

使用 const 变量:

const int n = 10;
int hora[n];

如果您坚持在运行时从控制台(或其他任何地方)读取大小,并静态分配内存,您可以这样做:

int n;
cin >> n;
const int size = n;
int hora[size];

【讨论】:

  • 您的最后一个示例无效。 n 必须是编译时常量表达式才能用作数组的声明大小。见stackoverflow.com/a/34696833/2805305
  • malloc 在 C++ 程序中?什么时候可以简单地使用std::vector&lt;int&gt;
  • @PaulMcKenzie 问题被标记为 c++,但代码更具 c 风格;因此 c 风格的答案
猜你喜欢
  • 2019-06-28
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多