c++ - 在任何函数外部声明的可变大小类型

标签 c++ compiler-construction function declare

声明二维数组时

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];

如果 dimconst,它会起作用,因为编译器能够准确判断 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/

相关文章:

javascript - 将函数作为参数传递

c++ - OpenCV : How to find the pixels inside a contour in c++

c++ - 调用unique_ptr子类继承的模板构造函数

java - 是否可以为 Java 中的 C 程序打印诊断信息?

c# - 为什么默认情况下不内联自动属性?

Javascript垂直滚动功能

c++ - 什么是 undefined reference /未解析的外部符号错误,我该如何解决?

c++ - 在 QT 中,我们可以有两个名称相同但参数不同的插槽吗?

c - 这些类型的变量初始化有一些性能差异吗?

function - 如何访问同一包中但来自不同文件的未导出函数