सी ++ में एक परिभाषा नियम कहा जाता है। इसका मतलब है कि (इनलाइन फ़ंक्शंस को छोड़कर), परिभाषाएं केवल एक संकलन इकाई में दिखाई दे सकती हैं। चूंकि सी ++ हेडर फाइलें प्रत्येक फ़ाइल में "कॉपी और पेस्ट" होती हैं, इसलिए अब आप कई जगहों पर परिभाषाएं डाल रहे हैं यदि आप केवल हेडर फाइलों में परिभाषाएं डालते हैं।
बेशक, आप कह सकते हैं, सब कुछ इनलाइन क्यों न करें। खैर, यदि संकलक आपके इनलाइन सुझाव का सम्मान करता है, तो लंबी कॉल के लिए कोड प्रत्येक कॉल साइट पर दोहराया जाएगा, जिससे आपका कोड अत्यधिक बड़ा हो जाएगा, और संभवत: थ्रैशिंग, कैश समस्याएं, और सभी प्रकार की अनुपयुक्त सामग्री का कारण बन जाएगा।
दूसरी तरफ, यदि कंपाइलर आपको नहीं सुनता है, और कुछ भी इनलाइन नहीं करता है, तो अब आपके पास 2 समस्याएं हैं: 1) आप नहीं जानते कि कौन सी अनुवाद इकाई को आपकी कक्षा परिभाषाएं मिली हैं, और 2) प्रत्येक बार जब आप उन्हें शामिल करते हैं तो संकलक को अभी भी आपकी परिभाषाओं से गुजरना पड़ता है। इसके अलावा, यह सुनिश्चित करने का कोई आसान तरीका नहीं है कि आपने दो अलग-अलग शीर्षकों में अलग-अलग विधि को दो बार गलती से परिभाषित नहीं किया है।
आपको एक परिपत्र निर्भरता समस्या भी मिलती है। किसी वर्ग के लिए किसी अन्य वर्ग की विधि का आह्वान करने के लिए, उस वर्ग को पहले घोषित करने की आवश्यकता है। इसलिए यदि 2 वर्गों को एक दूसरे के तरीकों का आह्वान करने की आवश्यकता है, तो प्रत्येक को परिभाषित किया जा सकता है इससे पहले घोषित किया जाना चाहिए। एक फ़ाइल में घोषणाओं और परिभाषाओं के साथ ऐसा करने का कोई तरीका नहीं है।
वास्तव में, भाषा और पार्सर कैसे बनाया गया था। यह दर्द है, लेकिन आपको बस इससे निपटना होगा।
मैं एक ज में पूरी कक्षा परिभाषा डालने और यह भी शामिल है, जबकि यह हैडर गार्ड के साथ की रक्षा करने का मतलब –
यदि आप शामिल क्या होता है कि एक ही निष्पादन में एक से अधिक जगह में ज फ़ाइल? उत्तर: आप एक ही कार्य की कई परिभाषाओं के साथ समाप्त होते हैं। - यहां वास्तविक बिंदु यह है कि आप नियमों के साथ सभी तरह की मूर्ख चीजें कर सकते हैं, लेकिन वे हमेशा सामान्य तरीके से अभ्यास में काम नहीं करते हैं। –