【问题标题】:Unable to pass 2-Dimensional array while using recursion in c++在 C++ 中使用递归时无法传递二维数组
【发布时间】:2019-10-17 09:35:33
【问题描述】:

我在 * 中看到了一个关于如何在函数中传递 2d-array 的答案,当我尝试其中一个时,给出了 3 种或更多方法,效果很好。但是当我尝试使用该方法进行回溯时,它给了我一个错误。

我尝试在全局范围内声明它,但我想学习如何以这种方式使用它

#include<bits/stdc++.h>
using namespace std;

int callAgain(int,int);
int call(int,int);

int call(int arr[][5],int n)
{
  if(n==1)
    return 0;

  cout<<"anything";

  callAgain(arr,n-1);     //getting error here.

  return 0;
 }
int callAgain(int arr[][5],int n)
{
  call(arr,n);
  return 0;
 }
int main(){

int arr[5][5];
memset(arr,0,sizeof(arr));
call(arr,5);

return 0;
}

错误:从 int(*)[5] 到 int [-fpremissive] 的无效转换

【问题讨论】:

  • 您显示的代码存在很多问题(以here 开头)。基本的罪魁祸首是在 c++ 代码中使用 原始 c 样式数组。你应该学习如何正确地促进std::arraystd::vector

标签: c++ recursion multidimensional-array pass-by-reference call-by-value


【解决方案1】:

您对callcallAgain 的前向声明承诺第一个参数将是int,但是当您实现它们时,您会说第一个参数是一个二维数组。

编译器不喜欢被骗......

【讨论】:

  • 没必要撒谎,可能在另一个 TU 中实现 :)
  • @Jarod42:call 的前向声明与其实现之间正好有一个空白行。 (什么是 TU?)
  • 好吧,我猜是Translation Unit
  • 当我在主函数中调用调用函数并传递一个数组时,它也应该给我一个错误,因为就像你说的那样,调用也是用 int 声明的。
  • 您希望它以多少次/方式告诉您这是错误的?