Avatar ·

C++ में फॉरवर्ड डिक्लेरेशन (forward declaration) का उपयोग कब किया जा सकता है?

सभी को नमस्ते! मैं C++ सीख रहा हूँ और बार-बार "forward declaration" (पूर्व घोषणा) शब्द पर ठोकर खाता हूँ। लगता है कि मैं समझ गया हूँ कि यह क्या है, लेकिन पूरी तरह से स्पष्ट नहीं है कि इसका उपयोग कब *करना चाहिए* और कब यह केवल चीजों को जटिल बनाएगा।\n\nउदाहरण के लिए, मेरे पास दो क्लासेस हैं: `A` और `B`। क्लास `A` में `B` का एक पॉइंटर है, और क्लास `B` में `A` का एक ऑब्जेक्ट वैल्यू द्वारा है। मैं लगभग इस तरह लिखने की कोशिश कर रहा हूँ:\n\n```cpp\n// A.h\n#include "B.h"\nclass A {\n B* ptr;\n};\n\n// B.h\n#include "A.h"\nclass B {\n A obj;\n};\n```\n\nस्वाभाविक रूप से, यह साइक्लिक डिपेंडेंसी के कारण कंपाइल नहीं होता है। मैंने सुना है कि इस चक्र को तोड़ने के लिए forward declaration का उपयोग किया जा सकता है। लेकिन वास्तव में कैसे? और यह किन अन्य स्थितियों में लागू होता है?\n\nइसके अलावा, मैंने देखा है कि हेडर फाइलों में कभी-कभी परिभाषा से पहले `class MyClass;` लिखा जाता है।