【问题标题】:Passing multidimensional array to a function using a variable as a parameter [duplicate]使用变量作为参数将多维数组传递给函数[重复]
【发布时间】:2016-04-01 18:34:03
【问题描述】:

对不起,如果这真的很容易解决或者是一个愚蠢的问题,但我最近才开始编程。

所以基本上在 void main() 我已经声明了一个像这样的二维数组:

void main()
{
  const int grid = 5;
  array[grid][grid];
{

但是我想将它传递给这样的函数:

void drawGrid(int grid, bool array[][])
{

}

这会产生错误,因为第二个参数需要有一个数字。但这是一个问题,因为在 main 中我使用 variable 声明了我的数组。

void drawGrid(int grid, bool array[grid][grid])
{

}

将变量放入参数中不起作用。

如何在参数中使用 int 变量网格 时将数组传递给该函数。

我进行了很多搜索并查看了与我有类似问题的人的答案,但我似乎无法弄清楚具体要做什么。谁能告诉我如何解决这个问题,我会非常感激,因为我已经尝试解决这个问题近两个小时了。谢谢。

【问题讨论】:

  • 错误信息是什么?无论如何,我认为这只是一个简单的范围界定问题。只需将grid 放在全局范围内即可。
  • @cad “一个数组可能没有这种类型的元素”是如果您将参数留空会发生的情况。如果你把网格放在那里,那绝对是一个范围界定问题。但是我不想全局声明这个变量(我们也不允许在我的课程中)所以我必须以其他方式来做。

标签: c++ arrays function multidimensional-array parameter-passing


【解决方案1】:

您可以使用以大小为模板参数的函数模板。

template <size_t grid>
void drawGrid(bool array[][grid])
{    
}

并简单地调用它:

drawGrid(array);

drawGrid<grid>(array);

【讨论】:

  • 谢谢你,如果这能正常工作,但我想知道函数模板与普通函数有何不同?有没有办法或将网格传递给正常功能?
  • 在函数模板中,大小必须在编译时知道。因此,bool array[][grid] 是一个有效的声明。在常规函数中,直到运行时才知道大小。因此,bool array[][grid] 不是一个有效的声明。
  • 好的,非常感谢,我现在明白了!
  • @Roixen 请注意,您可以指定两个维度。此处的示例将接受 bool[N][grid] 的所有 N 值。
猜你喜欢
  • 2022-08-09
  • 2013-09-13
  • 1970-01-01
  • 1970-01-01
  • 2012-01-22
  • 2021-08-17
  • 1970-01-01
  • 1970-01-01
  • 2018-08-30
相关资源
最近更新 更多