कोड की निम्न सरल टुकड़ा संकलित भीतर वर्ग की घोषणा है, हालांकि मुझे समझ नहीं आता क्यों:सी ++ फॉरवर्ड क्लासेस
class C {
class B;
class A {
B getB() { return B(); }
};
class B {
};
};
int main(int, char**)
{
return 0;
}
मैं तो "class C
" सामान बाहर टिप्पणी करते हैं, तो इतना है कि B
के आगे घोषणा , A
की परिभाषा और B
की परिभाषा अब एक वर्ग के भीतर नेस्ट कर रहे हैं, कोड संकलन नहीं करता, क्योंकि B
एक अधूरी प्रकार का है:
main.cpp: In member function 'B A::getB()':
main.cpp:6: error: return type 'struct B' is incomplete
main.cpp:6: error: invalid use of incomplete type 'struct B'
main.cpp:3: error: forward declaration of 'struct B'
मैं समझ और इसका अर्थ अपूर्ण होने के लिए क्या है, अर्थात् कि इसे अभी तक परिभाषित नहीं किया गया है और इसलिए संकलक संभवतः यह नहीं जानता कि इसके लिए कितना स्थान आवंटित किया जाए। लेकिन B
को ऊपर दिए गए कोड में अधूरा क्यों नहीं माना जाता है, जहां A
और B
दोनों को C
के अंदर घोषित और परिभाषित किया गया है?
बहुत बढ़िया, इसे साफ़ करने के लिए धन्यवाद। इस विशेष प्रश्न को क्या लाया गया है libpqxx का ['परिणाम'] (http://pqxx.org/devprojects/libpqxx/doc/stable/html/Reference/) वर्ग है, जिसने 'tuple' और' field' कक्षाएं निहित की हैं, में जो 'टुपल' अपने फ़ंक्शन निकायों में से एक में 'फ़ील्ड' बनाता है (यानी, लाइन 183) – villapx