2017-01-30 2 views
1

이 내 코드입니다 :char에서 char로 변환 할 때 오류가 발생하는 이유는 무엇입니까?

#include <iostream> 
using namespace std; 

bool funkcja (char * a[3][7], char * b[7]); 

int main() 
{ 

    char T[3][7]={{'A', 'L', 'A', 'M','A', 'k', 'o'}, 
      {'M', 'A','M','K','O','T','A'}, 
      {'T', 'E','Q','U','I','L','A'}}; 

    char tab[7]={ 'A', 'L', 'A', 'M','A', 'k', 'o' }; 

    cout<<funkcja(T, tab)<<endl; 

    return 0; 
} 

bool funkcja (char * a[3][7], char * b[7]) 
{ 
    int licznik=0; 

    for (int i=0;i<3;i++) 
    { 
     for (int j=0; j<7;j++) 
     { 
       if (a[i][j]==b[j]) 
       { 
        licznik++; 
        if (licznik==7) return true; 
       } 
       else { 
        licznik=0; 
       } 
     } 
     licznik=0; 
    } 
    return false; 
} 

그리고이 구축을 위해 노력하고있을 때 내가 얻을 :

 
[Error] cannot convert 'char (*)[7]' to 'char* (*)[7]' for argument '1' to 'bool funkcja(char* (*)[7], char**)' 
+0

에서 자신의 크기를 전달할 수'*'이 함수에 전달하는 인수의 각각에서. –

+2

'funkcja' 함수는'char *'의 2D 배열을 필요로합니다. 당신은 그것에게'char'의 2D 배열을 주려고합니다. 'char'에서'char *'로의이 변환은 허용되지 않습니다. – DeiDei

+0

참고로 코드의 엔터티에 영어 이외의 이름을 지정하는 것은 매우 나쁜 스타일입니다. 나보다 그 습관을 빨리 없애는 것이 좋습니다. –

답변

6

함수 정의가 올바르지 않습니다.

bool funkcja (char * a[3][7], char * b[7]) 

에 : 당신은 변경해야 할 첫 번째 배열 차원을 생략 할 수 있습니다

bool funkcja (char a[3][7], char b[7]) 

주, 그래서 이것은 줄일 수있다 :

bool funkcja (char a[][7], char b[]) 
+0

OP에는 두 번째 매개 변수 no와 동일한 문제가 발생합니까? – Borgleader

+0

두 번째 매개 변수가 잘못 입력되었습니다. – SergeyA

+0

@ Borgleader : 감사합니다. 내 초점이 너무 좁습니다! –

2

귀하의 funkcja 두 배열을 받아 포인터이지만 아직 문자 배열을 전달하고 있습니다. 당신은 당신의 funkcja에 전달 된 인수 및 매개 변수의 유형 사이에 유형 불일치가

bool funkcja (char a[][7], char b[]); 
+1

'char a [3] []'는 3 개의 원소의 배열이 될 것이고, 각 원소는'char []'형을 가지고 있지만 유효하지는 않습니다. – hvd

+1

@PaulR,이 점을주의 해 주셔서 감사합니다. – SergeyA

+0

@hvd, 주목 해 주셔서 감사합니다. – SergeyA

0

:

당신은 당신의 서명을 변경해야합니다. 그것은 다른 대답에서 설명되었습니다. 또한 참조로 배열을 전달할 수 있으며 가장 쉬운 방법은 템플릿을 사용하는 것입니다. 이 방법 당신은 또한 제거 컴파일 시간 :

[live]

#include <iostream> 
#include <string> 
#include <vector> 

#include <iostream> 
using namespace std; 

template<int N, int M> 
bool funkcja (char (&a)[N][M], char (&b)[M]); 

int main() 
{ 

    char T[3][7]={{'A', 'L', 'A', 'M','A', 'k', 'o'}, 
      {'M', 'A','M','K','O','T','A'}, 
      {'T', 'E','Q','U','I','L','A'}}; 

    char tab[7]={ 'A', 'L', 'A', 'M','A', 'k', 'o' }; 

    cout<<funkcja(T, tab)<<endl; 

    return 0; 
} 

template<int N, int M> 
bool funkcja (char (&a)[N][M], char (&b)[M]) 
{ 
    int licznik=0; 

    for (int i=0;i<N;i++) 
    { 
     for (int j=0; j<M;j++) 
     { 
       if (a[i][j]==b[j]) 
       { 
        licznik++; 
        if (licznik==M) return true; 
       } 
       else { 
        licznik=0; 
       } 
     } 
     licznik=0; 
    } 
    return false; 
} 
관련 문제