代码之家  ›  专栏  ›  技术社区  ›  usertfwr

在将大小为整数变量的数组声明时,为什么会出现编译器错误?

  •  1
  • usertfwr  · 技术社区  · 13 年前

    在visual studio中,我遇到了一个以前在Dev-C++中没有的错误:

    int project = (rand() % 5) + 1 ;
    int P[project][3];
    

    编译:

    错误C2057:应为常量表达式
    错误C2466:无法分配大小为0的常量数组
    错误C2133:“P”:未知大小

    你能帮助理解这个错误吗?

    3 回复  |  直到 7 年前
        1
  •  1
  •   Mert Akcakaya    13 年前

    在这种情况下,您需要动态分配内存。所以你不能说 int P[someVariable] 。您需要使用 int *mem = new int[someVariable]

    看一看 this link.

        2
  •  1
  •   Alok Save    13 年前

    在C++中,您只能创建大小为编译时常数的数组。
    数组的大小 P 需要在编译时知道,并且它应该是一个常量,编译器通过诊断消息警告您这一点。

    为什么不同的编译器会产生不同的结果?

    大多数编译器允许您通过编译器扩展创建可变长度数组,但这是非标准批准的,这样的使用将使您的程序无法在不同的编译器实现之间移植。这就是你所经历的。

        3
  •  0
  •   MSalters    13 年前

    可变长度数组的标准C++类是 std::vector .在这种情况下 std::vector<int> P[3]; P[0].resize(project); P[1].resize(project); P[2].resize(project);