3

次のような逆呼び出しで多次元配列を関数に渡しました。

template<int size>
void print_multidimension_array(int A[][size], int &cnt){
  if(cnt <= 0){
       return;
  }
  else{
      int (*B)[size];
      print_multidimension_array(B, cnt--);
  }

}
int main(int argc, const char * argv[])
{
  int A[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}};
  int count = 5;
  print_multidimension_array(A, count);
}

コンパイルエラーは発生しませんでしたが、実行した後、「「print_multidimension_array」を呼び出すための一致する関数がありません」と言われました。助けや提案をありがとう。

4

2 に答える 2

9

cnt--の古い値のコピーを返しますcnt。これは、参照にバインドできない一時的な右辺値であるため、関数の 2 番目の引数として使用することはできません。

私はあなたがしたいと思い--cntます。これにより、参照にバインドできる新しい値を参照する左辺値が得られます。

引数を値で取得すると、コンパイラ エラーが修正されます。ただし、無限ループを回避するには、事前にデクリメントする必要があります。

于 2012-12-19T13:55:36.257 に答える
3

変化する:

void print_multidimension_array(int A[][size], int &cnt){

に:

void print_multidimension_array(int A[][size], int cnt){
于 2012-12-19T13:55:14.077 に答える