【问题标题】:Error: Expression must have a constant value, when variable is constant?错误:表达式必须有一个常量值,什么时候变量是常量?
【发布时间】:2013-05-19 23:29:51
【问题描述】:

我在一个 C++ 程序中有以下三行代码:

cin >> size;
const int arrsize = size;

int inBoard[arrsize][arrsize];

VS Express 给我以下错误:Error: expression must have a constant value 在最后一行,特别是在两次提到 arrsize 时。我不明白这一点,因为我将arrsize 声明为const?这里有什么问题,我该如何避免?

【问题讨论】:

  • 它必须是编译时常量。
  • 那么如何创建一个用户在运行时确定大小的数组呢?
  • 通过new操作符使用动态分配。
  • 使用std::vector
  • @MarioA.CorcheroJiménez,FWIW,它在即将到来的 C++14 中也是合法的。

标签: c++


【解决方案1】:

您不能像使用arrsize 作为大小在堆栈上创建数组,因为它在编译期间不是恒定的。 arrsize 的值将取决于 size,它恰好在运行时获取它的值。

解决方案:

  • 使用std::vector<std::vector<int> >
  • 使用operator new[] 分配您自己的二维数组(不推荐。严重。)

【讨论】:

  • 嗯,向量是否类似于 Java 中的 ArrayLists?
  • @user2356560,他们非常接近,是的。
  • @0x499602D2 出于同样的原因他不能使用常规数组 - 他不知道大小?
  • 这个答案混淆了const 和常量表达式。将size 分配给arrsize 非常好。他们是否是const 并不重要。重要的是arrsize 不是一个常量表达式。
  • @sftrabbit 我想我现在措辞更好。
猜你喜欢
  • 2014-10-21
  • 2021-12-02
  • 2012-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-14
  • 1970-01-01
相关资源
最近更新 更多