2017-11-16 3 views
-4

ANSII C의 작은 프로그램에서 컴파일 할 때 "충돌하는 형식"오류 메시지가 나타납니다. 왜 그런지 모르겠습니다. 특히 다른 .c 파일에서 동일한 상황을 아무런 문제없이 테스트 한 사실을 감안할 때 그렇습니다. 다음과 같이충돌 형식 오류 메시지

코드는 다음과 같습니다

void search(char *v, Message *l){ 

    long int max; 

    max=countNodes(l); 

(...이 부분은 중요하지 않습니다, 당신이 확신 ...) 그래서

} //end of the "search" function 

    long int countNodes(Message *l){ 

    long int i=0; 

    while(l!=NULL){ 

    i++; 
    l=(l->nseg); 

    } 

    return(i); 
    } 

은 "countNodes"기능 "l"(링크 된 목록)의 노드 수를 결정합니다. 그런 다음 해당 번호가 "검색"기능으로 반환됩니다. 그러나 컴파일러는 계속 "충돌 유형"오류 메시지를 표시하며 왜 그런지 모르겠습니다 ... 모든 것이 잘되고 잘 작성되었다고 생각합니다.

모든 도움을 주실 수 있습니다. 미리 감사드립니다!

+1

[mcve]가 아니며 질문을 읽고 * 답장하십시오. 또한 * 정확한 * 오류 메시지가 포함되어 있어야합니다. –

+1

'countNodes()'가 호출되기 전에 선언 된 프로토 타입은 어디에 있습니까? 사용 또는 정의 전에 프로토 타입이없는 경우 현대 (C11 또는 C99) 표준이 아닌 골동품 (C90)으로 코딩해야합니다. –

+0

[C에서 충돌 유형 오류가 발생했습니다.] (https://stackoverflow.com/questions/1779358/conflicting-types-error-in-c) –

답변

3

기본적으로 컴파일러는 파일을 한 줄씩 읽습니다. 따라서 max=countNodes(l);을 읽을 때 아직 귀하의 countNodes 기능을 "알지 못합니다".

  • 가 검색 기능을하기 전에 countNodes 기능을 넣어 :

    당신은 두 가지 옵션이 있습니다.

  • countNode 함수의 프로토 타입을 search 함수 앞에 넣으십시오 (익숙하지 않은 경우 "프로토 타입이 C 인 경우"참조).