2010-03-12 18 views
5

मेरी कोडसी चेतावनी परस्पर विरोधी प्रकार

void doc(){ 
      //mycode     
      return; 
      } 

मेरी चेतावनी

conflicting types for 'doc' 

किसी को भी इसे हल कर सकते है।

+1

आपके पास शायद कहीं और परिभाषित एक और 'डॉक्टर' है, अपनी शामिलियों की जांच करें, त्रुटि संदेश आपको बताएगा कि विवादित घोषणा भी कहां है। – falstro

उत्तर

3

यह स्पष्ट रूप से आपका पूरा कोड नहीं है।

हालांकि, उस त्रुटि का अर्थ है कि doc (शायद एक वैश्विक चर? हेडर फ़ाइल में कुछ?) के लिए एक और घोषणा है जो void फ़ंक्शन नहीं है जो कोई पैरामीटर नहीं लेता है।

+4

उन्होंने अपनी परिभाषा –

+0

हां, अच्छी पकड़ से पहले भी फ़ंक्शन का उपयोग किया होगा। फिर भी, पूरा कोड नहीं है। :) –

3

यू कुछ अन्य प्रकार/हस्ताक्षर के साथ यह घोषित कर दिया और कुछ अन्य प्रकार/हस्ताक्षर के साथ परिभाषित किया है ..

तरह

int doc(); 
void doc() 
{ 
} 

यू यह चेतावनी दे देंगे।

2

"डॉक्टर" शायद पहले से ही एक अलग प्रकार के साथ घोषित किया गया है ... आपको पिछली घोषणा को खोजने का प्रयास करना चाहिए!

27

सी में, यदि आपके पास कॉल करने पर फ़ंक्शन के लिए प्रोटोटाइप नहीं है, तो इसे int वापस करने और पैरामीटर की एक निर्दिष्ट संख्या लेने के लिए माना जाता है। फिर, जब आप बाद में अपने फ़ंक्शन को void लौटने के रूप में परिभाषित करते हैं और कोई पैरामीटर नहीं लेते हैं, तो संकलक इसे एक संघर्ष के रूप में देखता है।

अपने कोड की जटिलता के आधार पर, आप इसके उपयोग से पहले समारोह की परिभाषा जाने के रूप में के रूप में सरल कुछ कर सकते हैं, या एक हेडर फाइल में समारोह घोषणा जोड़ने और इसे शामिल हैं।

किसी भी मामले में, इसका प्रभाव होने से पहले फ़ंक्शन प्रोटोटाइप उपलब्ध कराने के लिए शुद्ध प्रभाव होना चाहिए।

तुम से पहले समारोह उपयोग

void doc(void); 

जोड़ते हैं तो आपको एक प्रोटोटाइप दायरे में दिखाई दे रहा है, और अपने चेतावनी दूर जाना होगा।

मुझे लगता है कि यह आपकी चेतावनी के लिए सबसे अधिक संभावित कारण है। आपके कोड में doc की एक स्पष्ट असंगत घोषणा हो सकती है, लेकिन हम यह नहीं बता सकते कि आपने पूर्ण कोड पोस्ट नहीं किया है।

2

आप या तो doc से पहले घोषित कर दिया, या अघोषित doc को फोन किया और इस प्रकार doc उस कॉल से के लिए एक संभावित पैरामीटर घोषणा निकालना संकलक के लिए मजबूर कर दिया है। अब, आपके द्वारा उद्धृत doc की परिभाषा उस पिछली घोषणा से अलग है (या तो संकलक द्वारा स्पष्ट या कटौती), जिसे "संघर्ष" के रूप में रिपोर्ट किया जाता है।

2

सुनिश्चित करें कि आपने अपने कोड में कहीं भी दस्तावेज़ का उपयोग नहीं किया है! मुझे लगता है कि केवल आपको परेशानी होती है!

12

अपनी प्रोग्राम फ़ाइल में अपने मुख्य फ़ंक्शन से पहले अपने दस्तावेज़ फ़ंक्शन को लिखने का प्रयास करें।

+0

धन्यवाद! यह समझाने की देखभाल क्यों है? – user1072706

+0

यह फ़ंक्शन की अगली घोषणा का प्रतिनिधित्व करता है और फ़ंक्शन का प्रोटोटाइप है। – Das

0

उपयोग के ऊपर दिए गए फ़ंक्शन को घोषित करने के लिए इसे हल किया गया।

उदाहरण:

void recordAudio(){ //declaration 

    doStuff(); 
} 


void initialise(){ 

    recordAudio(); // usage 
} 

के रूप में आप ऊपर देख सकते हैं, recordAudio() के उपयोग जहां प्रयोग किया जाता है से ऊपर है।

+0

क्या आप इस – nullpointer

+0

@nullpointer पर कोड जोड़ सकते हैं मैंने एक उदाहरण के साथ अपना जवाब अपडेट किया है –

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