2013-02-25 33 views
6

Tôi đang triển khai chức năng sắp xếp bong bóng, nơi sắp xếp các từ. các chức năng trao đổi từ hoàn toàn tốt nhưng tôi không thể nhận được lỗi. Đã cố gắng tìm kiếm trực tuyến nhưng không thể nhận được mọi thứ hữu ích. Tôi đã đánh dấu nơi tôi gặp lỗi.Con trỏ đến Loại không đầy đủ không được phép

Cảm ơn sự giúp đỡ của bạn.

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

chỉ sử dụng void * cho lần tiếp theo, không phải là cấu trúc cụ thể. – Dariusz

Trả lời

11

Lỗi này được đưa ra khi bạn đang cố gắng sử dụng một struct đã được chuyển tiếp-tuyên bố, nhưng không định nghĩa. Mặc dù hoàn toàn OK để khai báo và thao tác các con trỏ đến các cấu trúc như vậy, cố gắng coi trọng chúng là không ổn, vì trình biên dịch cần biết kích thước và bố cục của chúng để thực hiện truy cập.

Cụ thể, trong trường hợp của bạn trình biên dịch không biết rằng struct nodenext, vì vậy

temp->next 

không biên dịch.

Bạn cần bao gồm định nghĩa của struct node trong đơn vị biên dịch nơi bạn xác định hàm sortWord để khắc phục sự cố này.

+1

Cảm ơn bạn, điều đó có ý nghĩa. –

+2

Điều đó sẽ hiệu quả nhưng sẽ ảnh hưởng đến chung của mã này. bằng cách sử dụng 'nodeGetNextNode' thay vào đó sẽ cho phép để lại chức năng này. và khi cấu trúc 'node' sẽ thay đổi, anh ta chỉ cần cập nhật" callbacks "(nếu tôi có thể gọi chúng trong C):' nodeGetNextNode', 'wordCompare' và' swap'. –

4

Bạn nên thay thế dòng này:

temp = temp->next; 

với dòng đó:

temp = nodeGetNextNode(temp); 

Lý do là trong mã này, bạn biết gì về cấu trúc của node. Tôi đoán đó là lý do tại sao bạn sử dụng chức năng nodeGetNextNode cho temp2. bạn chỉ cần sử dụng nó cho temp là tốt.

+1

yup, đó là chính xác những gì tôi đã làm, cảm ơn bạn mặc dù. –

+2

@Manmohit Nếu đây là những gì bạn đã làm, bạn nên đặt dấu kiểm ở đây. Và làm điều đó sớm ... vì trước đây bạn đã kiểm tra nó, một đếm ngược 5 phút bắt đầu. – Potatoswatter

+0

@Potatoswatter: cảm ơn sự quan tâm. Nhưng miễn là vấn đề được giải quyết tôi đang hạnh phúc (: –

Các vấn đề liên quan