2017-10-18 4 views
0
#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; 
} 

The error is pointing to the function call 'show(goldCoin[ROW][COLUMN], 1, 1);' inside main. As a beginner I don't see any syntactical errors on that statement. Can somebody help?"오류 : 'int'에서 'int (*) [8]'[-fpermissive] '로의 잘못된 변환이란 무엇입니까?

+3

goldCoin [ROW] [COLUMN]은 하나의'int'를 참조하고 (함수가 배열을 벗어난 배열을 제외하고) 함수는 2 차원 배열을 기대합니다 - 무엇이 불분명합니까? – UnholySheep

+4

'show'는'int [] []'를 취하지 만,'goldCoin [ROW] [COLUMN]'을 호출하면 하나의'int'를 생성하는 배열로 색인이 생성됩니다. 나는 당신이'show (goldCoin, 1, 1)'을 의미했다고 가정합니다. – CoryKramer

+0

Thank CoryKramer. 나는 그것을 몰랐다. –

답변

1

show(goldCoin[ROW][COLUMN], 1, 1);을 호출하면 2D 배열이 아닌 첫 번째 인수로 int을 전달할 수 있습니다.

나는 당신이 show(goldCoin, 1, 1);을 대신 할 의도 였다고 생각합니다.

1

인수를 전달하는 것은 잘못된 방법입니다. 브라켓없이 배열 이름 식별자에 전달합니다

show(goldCoin, 1, 1); 

표현 goldCoin[ROW][COLUMN]이 2 차원 배열의 유형 int의 하나 개의 값을 나타냅니다. 따라서 함수가 예상하는 값인 int (*)[] 값 대신 int 값을 전달합니다. 좌표가 [7][8] 인 요소가 없으므로 goldCoin[7][8]으로 표시되므로 배열을 0으로 인덱싱하므로 실제로이 범위를 벗어납니다. 만 함수 선언/정의에 서명은 다음과 같습니다

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

이 두 가지를 혼동하지 마십시오.