2013-02-25 26 views
6

मैं एक बबल सॉर्ट फ़ंक्शन को कार्यान्वित कर रहा हूं, जहां यह शब्द टाइप करता है। स्वैप फ़ंक्शन शब्द पूरी तरह से ठीक हैं लेकिन मैं त्रुटि प्राप्त करने में असमर्थ हूं। ऑनलाइन खोज करने की कोशिश की लेकिन कुछ उपयोगी नहीं हो सका। मैंने चिह्नित किया है कि मुझे त्रुटि कहाँ मिलती है।अधूरा वर्ग प्रकार के सूचक को अनुमति नहीं है

सहायता के लिए धन्यवाद। जब आप एक struct कि आगे की घोषित किया गया है का उपयोग करने की कोशिश कर रहे हैं, लेकिन परिभाषित नहीं

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

बस एक विशिष्ट संरचना नहीं, अगले के लिए शून्य * का उपयोग करें। – Dariusz

उत्तर

11

यह त्रुटि दिया जाता है। हालांकि पॉइंटर्स ऐसे सूत्रों को घोषित करने और कुशलतापूर्वक उपयोग करने के लिए बिल्कुल ठीक है, लेकिन उन्हें निष्पादित करने के लिए संकलक को उनके आकार और लेआउट को जानने की आवश्यकता है, क्योंकि उन्हें डिफरेंस करने की कोशिश करना ठीक नहीं है।

विशेष रूप से, आपके मामले में संकलक पता है नहीं struct nodenext है, इसलिए

temp->next 

संकलन नहीं है।

आपको संकलन इकाई में struct node की परिभाषा शामिल करने की आवश्यकता है जहां आप इस समस्या को ठीक करने के लिए अपने sortWord फ़ंक्शन को परिभाषित करते हैं। कि लाइन के साथ

temp = temp->next; 

:

+1

धन्यवाद, यह समझ में आता है। –

+2

यह काम करेगा लेकिन इस कोड के सामान्य पर विचार करेगा। इसके बजाय 'nodeGetNextNode' का उपयोग करके इस फ़ंक्शन को छोड़ने की अनुमति होगी। और जब 'नोड' संरचना बदलेगी तो उसे केवल "कॉलबैक" को अपडेट करने की आवश्यकता होगी (यदि मैं उन्हें सी में कॉल कर सकता हूं): 'nodeGetNextNode',' wordCompare' और 'swap'। –

4

आप इस लाइन को प्रतिस्थापित करना चाहिए

temp = nodeGetNextNode(temp); 

कारण है इस कोड में आप node की संरचना के बारे में कुछ भी नहीं पता है कि। मुझे लगता है कि आपने temp2 के लिए nodeGetNextNode फ़ंक्शन का उपयोग किया है। आपको इसे अस्थायी रूप से भी इस्तेमाल करने की आवश्यकता है।

+1

yup, यह वही है जो मैंने किया था, धन्यवाद हालांकि। –

+2

@Manmohit यदि आपने ऐसा किया है, तो आपको यहां चेकमार्क रखना चाहिए। और जल्द ही ऐसा करें ... चूंकि आपने पहले इसे चेक किया था, 5 मिनट की उलटी गिनती शुरू हुई थी। – Potatoswatter

+0

@ पोटाटोस्वाटर: देखभाल के लिए धन्यवाद। लेकिन जब तक समस्या हल हो जाती है मैं खुश हूं (: –