声明二维数组时
int random[height][width];
然后在函数中使用它
void populate(int random[height][width], int x, int y)
给出在任何函数之外声明的错误可变大小类型。 我知道我做错了什么,而且是小事。我只是记性不好...
最佳答案
我现在要站出来告诉你多维数组不值得在 C 或 C++ 中费心思。你最好使用一维数组(或者,更好的是,标准容器)并编写一个索引函数:
inline int index (int x, int y)
{
return x + y * width;
}
现在解决你的问题。 C++ 不支持 C99 可变长度数组。编译器必须在编译时知道数组的大小。例如,以下内容将不起作用。
int dim = 4;
int ar[dim];
如果 dim
是 const
,它会起作用,因为编译器能够准确判断 ar
应该有多宽(因为值dim
不会改变)。这可能是您遇到的问题。
如果你想在编译时改变大小,你需要做一些更困难的事情,比如写一个模板化的引用。不能对多维数组使用指针,因为它们在 C/C++ 中的布局方式。模板化示例可能类似于以下异常:
template <int Width, int Height>
void populate(int (&(&random)[Width])[Height], int x, int y);
这很丑。
对于运行时,您需要使用 new
来分配数据,或者使用容器类型。
关于c++ - 在任何函数外部声明的可变大小类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1435004/