"错误:来自' int'的无效转换是什么意思?到' int(*)[8]' [-fpermissive]&#34 ;?

时间:2017-10-18 13:09:28

标签: c++ compiler-errors

#include <iostream>

using namespace std;

enum {ROW = 7, COLUMN = 8};

void show(int matrix[][COLUMN], int, int);

int main (){

    int horizontal = 0;
    int vertical = 5;
    int goldCoin[ROW][COLUMN] = {
                            {5, 1, 0, 4, 1, 1, 2, 0},
                            {0, 3, 2, 1, 0, 3, 0, 1},
                            {4, 3, 0, 6, 5, 0, 1, 0},
                            {3, 1, 0, 3, 4, 0, 1, 3},
                            {0, 5, 2, 0, 1, 1, 5, 1},
                            {2, 1, 6, 1, 6, 0, 2, 1},
                            {0, 0, 4, 3, 2, 3, 0, 2}
                        };

    show(goldCoin[ROW][COLUMN], 1, 1);
    return 0;
}

void show(int matrix[][COLUMN], int x, int y){
    if(y >= COLUMN)
        cout << "[error: column index is beyond array limit]" << endl;
    else
        cout << "[" << matrix[x][y] << "]" << endl;
}
  

错误指向函数调用&#39; show(goldCoin [ROW] [COLUMN],1,1);&#39;在主要内部。作为初学者,我在该陈述中看不到任何语法错误。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

传递参数是错误的方法。传入不带括号的数组名称标识符:

show(goldCoin, 1, 1);

表达式goldCoin[ROW][COLUMN]表示2D数组中类型int的单个值。因此,您传递int值代替函数所需的int (*)[]值。在这种情况下,这实际上是读出界限,因为没有[7][8]坐标的元素用goldCoin[7][8]表示,因为数组是零索引的。 只有在函数声明/定义中,签名才是:

void show(int matrix[][COLUMN], int, int);

不要混淆两者。

答案 1 :(得分:1)

在调用show(goldCoin[ROW][COLUMN], 1, 1);时,您传递int作为第一个参数,而不是2D数组,正如您可能想要的那样。

我相信您的意思是show(goldCoin, 1, 1);