2013-04-24 6 views
7

मुझे यह रिकर्सिव फ़ंक्शन ठीक से संकलित करने के लिए प्रतीत नहीं होता है, और मुझे यकीन नहीं है कि क्यों। कोड इस प्रकार है:नोट: 'point_forward' की पिछली निहित घोषणा

void point_forward (mem_ptr m) { 
    mem_ptr temp; 
    temp = m->next; 
    if (temp->next != NULL) point_forward(temp); 
    m->next = temp->next; 
} 

मेरे संकलक इस रिटर्न:

mm.c: 134: 6: चेतावनी: 'point_forward' [डिफ़ॉल्ट रूप से सक्षम]
मिमी के लिए प्रकार परस्पर विरोधी। ग: 96: 2: ध्यान दें: 'point_forward' के पिछले निहित घोषणा यहाँ था

+2

कृपया लाइन में आपके पास क्या है पेस्ट करें 96 –

+0

point_forward (m); – user2313514

+0

यह मेरे कोड में इस फ़ंक्शन का एकमात्र अन्य उदाहरण है। – user2313514

उत्तर

12

कुंजी इस में है:

पिछले निहित घोषणा 'point_forward' की यहाँ

लाइन 96 पर था तुम हो:

point_forward(m); // where m is a mem_ptr; 

के बाद से संकलक नहीं अभी तक point_forward(m) के लिए एक समारोह घोषणा हुई है, यह "परोक्ष परिभाषित करता है "(यानी, मानता है) एक फ़ंक्शन जो एक int देता है:

int point_forward(mem_ptr m); 

यह बाद में परिभाषा के साथ संघर्ष:

void point_forward (mem_ptr m) { 

इसे ठीक करने के लिए आप कर सकते हैं:

  1. कहीं लाइन 96 से पहले एक स्पष्ट घोषणा रखो: void point_forward(mem_ptr m); यह कैसे point_forward() के इलाज के लिए संकलक बता देंगे जब यह लाइन 96 पर देखता है, भले ही यह अभी तक कार्य कार्यान्वयन को नहीं देखा है।

  2. या, लाइन 96 के ऊपर पूरे फ़ंक्शन को परिभाषित करें (फ़ंक्शन परिभाषा को लाइन 134 से ऊपर लाइन 96 तक ले जाएं)।

यहां थोड़ा सा more about declaring functions है।

आम तौर पर, शैली के लिए, मैं करूंगा या तो:

  • आप किसी भी अन्य सी फाइलों में point_forward() उपयोग करने के लिए पूर्ण रूप से इसे परिभाषित नहीं करना चाहते हैं: पर

    static void point_forward(mem_ptr m) { ..function body goes here.. }

    स्रोत फ़ाइल का शीर्ष। एक हेडर फाइल में

    void point_forward(mem_ptr m); 
    

    शामिल करने के लिए के लिए अन्य फ़ाइलों:

  • आप अन्य सी फाइलों में point_forward() उपयोग करना चाहते हैं, एक आगे घोषणा डाल दिया।

संबंधित मुद्दे