2010-08-26 27 views
5

मैं थोड़ा घोषणाओं बनाम परिभाषाओं के नियमों पर धुंधला कर रहा हूँ।अलग घोषणा और ग में परिभाषा ++

मैं funcs.h में निम्नलिखित घोषणा:

void sumTotalEnrgyAndClush(Protein &A,Protein &B,double ans[2],double enrgyA[18][18],double  enrgyB[18][18]); 

सूचना है कि ans [2] enrgyA और बी

funcs.cpp में दाखिल होने से पहले परिभाषा इस तरह शुरू होता है:

void sumTotalEnrgyAndClush(Protein &A,Protein &B,double enrgyA[18][18],double enrgyB[18][18],double ans[2]) 

यह संकलित (मेकफ़ाइल के माध्यम से) और ठीक काम करता है।

मैंने यह भी देखा है कि अगर मैं घोषणा को दूर संकलक ठीक प्रबंधन करने के लिए लगता है।

क्यों बहस के क्रम में परिवर्तन कोई फर्क नहीं पड़ता? क्या यह है कि पिछले 3 आइटम सभी पॉइंटर्स हैं इसलिए क्रम में अंतर कोई फर्क नहीं पड़ता?

+0

संभावित डुप्लिकेट [परिभाषा और घोषणा के बीच क्या अंतर है?] (Http://stackoverflow.com/questions/1410563/what-is-the-difference-between-a-definition-and-a- घोषणा) – sbi

+2

डुप्लिकेट नहीं; वास्तव में एक दिलचस्प सवाल है। –

+0

क्रम में परिवर्तन * करता है * मायने रखता है। संपादित करें: जेम्स मैकनेलिस ने अपने जवाब में बेहतर कहा। –

उत्तर

12

क्यों बहस के क्रम में परिवर्तन कोई फर्क नहीं पड़ता?

आदेश मामला है। सी ++ में, फ़ंक्शंस को अधिभारित किया जा सकता है, इसलिए दो या दो से अधिक फ़ंक्शंस का नाम समान हो सकता है यदि उनके पास अलग-अलग पैरामीटर हैं (या, यदि वे सदस्य कार्य हैं, यदि वे कॉन्स्ट-क्वालीफिकेशन में भिन्न हैं)।

वास्तव में आप दो sumTotalEnrgyAndClush कार्यों घोषित किया है। हेडर फ़ाइल में घोषणा एक ऐसा फ़ंक्शन घोषित करती है जिसे कभी परिभाषित नहीं किया गया है, और स्रोत फ़ाइल में घोषणा एक दूसरे फ़ंक्शन की घोषणा और परिभाषित करती है।

आप (यह कॉल करने या उदाहरण के लिए इसका पता लेने, द्वारा) समारोह हेडर फाइल में घोषित उपयोग करने का प्रयास करते हैं, तो आपको कोई त्रुटि मिलती है क्योंकि वह कार्य निर्धारित नहीं है जाएगा।

+0

मेरी इच्छा है कि मैं इसे कई बार बढ़ा सकता हूं! – Kangkan

+0

मूल रूप से मुझे भ्रमित करने वाला यह था कि मेरा कार्यक्रम आपके आखिरी वाक्य में जो भी बताया गया है उसके बावजूद काम कर रहा था। मैंने तब से देखा है कि मेरी main.cpp फ़ाइल में एक अतिरिक्त परिभाषा थी जो funcs.h फ़ाइल में घोषणा से मेल खाता था। लेकिन आपका उत्तर मेरे सामान्य ज्ञान के लिए एक बड़ा जोड़ा था। धन्यवाद। – Meir

+1

@Dave: आप नियमों जहां परिभाषाओं बातें हेडर ('xh' में सब कुछ' x.cpp' में परिभाषित किया गया है की तरह) में घोषित लिए जाने का एक सेट से चिपके हैं, तो आप एकाधिक (भिन्न) परिभाषाओं होने अंत नहीं होगा एक ही चीज़ के लिए। एक बार जब आप एक वास्तविक बड़ी परियोजना (हजारों स्रोत फाइलें) में हों, तो आपको इसकी आवश्यकता होगी, या आप कभी भी अपना रास्ता नहीं ढूंढ पाएंगे। – sbi

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