2013-02-25 3 views
6

단어를 정렬하는 버블 정렬 기능을 구현합니다. 스왑 함수 단어가 완벽하게 괜찮지 만 오류가 발생하지 않습니다. 온라인 검색을 시도했지만 유용하지 않을 수 있습니다. 나는 어디서 오류가 발생했는지 표시했다.불완전한 클래스 유형의 포인터가 허용되지 않습니다.

도움 주셔서 감사합니다.

void sortWord (struct node** head) { 
    struct node* temp = (*head); 
    struct node* temp2 = (*head); 

    int i; 
    int j; 
    int counter = 0; 
    while(temp != NULL) 
    { 
     temp = temp->next; //<-- this is where i get the error. 
     counter++; 
    } 
    for(i = 1; i<counter; i++) 
    { 
     temp2=(*head); 
     for(j = 1; j<counter-1;j++) 
     { 
      if(wordCompare(temp2,nodeGetNextNode(temp2))>0) 
      { 
       swap(head,temp2,nodeGetNextNode(temp2)); 
       continue; 
      } 
     } 
     temp2 = nodeGetNextNode(temp2); 
    } 
} 
+0

다음 구조체에는 void *를 사용하십시오. – Dariusz

답변

11

이 오류는 당신이 앞으로 선언 된 struct를 사용하려고하지만,을 정의되지 때 주어집니다. 컴파일러가 액세스를 수행하기 위해 크기와 레이아웃을 알아야하기 때문에 그러한 구조에 대한 포인터를 선언하고 조작하는 것은 절대적으로 괜찮습니다. 그러나 역 참조를 시도하는 것은 좋지 않습니다.

특히, 귀하의 경우 컴파일러는 struct nodenext을 가지고 있음을 알고하지 않기 때문에

temp->next 

는 컴파일되지 않습니다.

당신은 당신이이 문제를 해결하기 위해 당신의 sortWord 기능을 정의하는 컴파일 단위에서 struct node의 정의를 포함해야합니다. 그 라인

temp = temp->next; 

:

+1

감사합니다. –

+2

이 코드는 작동하지만 사용법에 영향을 줄 것입니다. 대신에'nodeGetNextNode'를 사용하면이 함수를 그대로 둘 수 있습니다. 'node' 구조체가 바뀌면 그는'callbacks '(C로 호출 할 수 있다면), nodeGetNextNode','wordCompare','swap' 만 업데이트하면됩니다. –

4

이 라인을 교체해야

temp = nodeGetNextNode(temp); 

그 이유는이 코드에 당신이 node의 구조에 대해 아무것도 알 수 없다. 나는 그것이 temp2에 대해 nodeGetNextNode 함수를 사용한 이유라고 생각합니다. 당신은 단지 temp 용으로도 사용할 필요가 있습니다.

+1

그래, 정확히 내가 한 일이다. 고마워. –

+2

@Manmohit 이것이 당신이 한 일이라면 여기에 체크 표시를해야합니다. 그리고 곧 ... 당신이 이전에 그것을 확인했기 때문에, 5 분 카운트 다운이 시작되었습니다. – Potatoswatter

+0

@Potatoswatter : 진심으로 감사드립니다. 그러나 문제가 해결되는 한 나는 행복하다 (: –

관련 문제