【发布时间】:2021-12-15 05:49:15
【问题描述】:
我正在关注有关此主题的互联网教程,但我遇到以下情况:
我有一个具有以下签名的函数:
void func(long& rows, long& columns, int array[][columns]);
我正在尝试使用这样的功能:
int matrix[5][4] = {0, -1, 2, -3,
4, -5, 6, -7,
8, -9, 10, -11,
12, -13, 14, -15,
16, -17, 18, -19};
long rows = 5;
long columns = 4;
func(rows, columns, matrix);
^--- 'No matching function for call to 'func''
有什么问题?为什么不能调用函数?
【问题讨论】:
-
您正在尝试使用variable-length array。这些是 C 语言的一个特性,在 C++ 中不支持。 C++ 中动态大小的数组拼写为
std::vector -
问题是这不是有效的 C++。 C++ 中的所有数组都有一个固定的、恒定的大小,并且您正试图将一个数组传递给一个函数,该函数的大小由另一个参数指定。 C++ 根本无法以这种方式工作。
-
您可以使用模板,将矩阵的大小作为参数。请注意,您不能在 C++ 中传递数组!您所能做的就是传递指向它们的指针或引用。如果大小不是编译时常量,请使用矩阵类(如
std::vector,但为 2D)。
标签: c++ arrays pointers multidimensional-array