我查看了所有其他类似主题的帖子,没有任何帮助,所以请不要标记为重复。
我在 main()
a const int SIZE = 20;
中定义。然后,我将其作为参数传递给我的函数 Mode:
int* Mode(int* numbers, int & mode, const int SIZE)
{
int occurences[SIZE];
// Calcualte mode
}
但是,我收到错误 expression must have a constant value
。
我的函数调用(在 main 中)如下所示:
int* occurencesPtr = Mode(numbersPtr, mode, SIZE);
用 SIZE
在文字的开头定义 20
。
我知道该错误是因为函数的版本 SIZE
仅在调用函数时才获取其值(?),但我不知道如何解决这个问题。
我什至尝试将 const int * const SIZEPtr = &SIZE
传递给函数,但这也不起作用。帮助?
编辑:我 不想 使用可变大小!请注意,我到处都制作了 SIZE
a const
!我只想使用相同的 SIZE 常量来声明我的数组。
编辑:动态数组不是我需要的。我只想要一个普通的命名数组,用传递给函数的 常量 大小值定义。
原文由 vasilescur 发布,翻译遵循 CC BY-SA 4.0 许可协议
这里对
const
的含义有一个误解,可能是因为这有点令人困惑:但这不是:
问题是数组声明中的数组大小必须是核心常量表达式。简而言之,这意味着在编译时可评估为常量的表达式。在第一种情况下确实如此(您可以看到
SIZE
是积分常数20
)但在第二种情况下 并非 如此。在那里,SIZE
函数参数只是const
- 从某种意义上说,它是不可修改的 - 而不是核心常量表达式。您可以看到不同之处在于我可以调用foo()
一些在运行时之前显然不可知的东西:为了将参数传递给
foo
并将该参数用作数组边界,将其设为const
是不够的 - 实际的整数值必须编码为类型(除非您将foo()
称为constexpr
我假设这里不是这种情况)。在这种情况下,您必须执行以下操作:或者:
或者干脆让
SIZE
成为全局常量,或者以其他方式访问foo()
与其参数无关。或者,总是有一个简单的选项:使用
std::vector
: