2014-04-25 11 views
5

मैं इस त्रुटि है:संकलक त्रुटि C4430: लापता प्रकार निर्दिष्टकर्ता - पूर्णांक मान लिया

"त्रुटि C4430: लापता प्रकार निर्दिष्टकर्ता - int ग्रहण नोट: सी ++ डिफ़ॉल्ट-पूर्णांक का समर्थन नहीं करता।" इस कोड के साथ

उदाहरण:

//A.h  
#include "B.h" 
class A{ 
    B* b; 
    .. 
}; 

//B.h 
#include "A.h" 
class B{ 
    A* a; // error error C4430: missing type specifier - int assumed. 
}; 
+5

आपको कक्षा ए का उपयोग शुरू करने से पहले हेडर फ़ाइल बीएच में घोषित करने की आवश्यकता है। –

+7

एक दूसरे को शामिल करने वाले दो शीर्षलेख एक अच्छा विचार नहीं है। "ए को समझने के लिए आपको पहले बी को समझना चाहिए" "बी को समझने के लिए, आपको पहले ए को समझना होगा" –

+1

लेकिन मुझे इसकी ज़रूरत है! इस समस्या को हल करने के लिए कैसे? – user3571201

उत्तर

17

यह circular dependency समस्या है। किसी वर्ग को पॉइंटर घोषित करने के लिए, कक्षा की परिभाषा की आवश्यकता नहीं है; यानी इस प्रकार को complete type होना आवश्यक नहीं है। इसलिए आपको B.h, forward declaration में शामिल करने की आवश्यकता नहीं है। जैसे:

//B.h 
class A; // change the include of A.h to forward declaration 
class B { 
    A* a; 
}; 
+0

लेकिन मुझे कक्षा बी में कक्षा ए के कार्यों का उपयोग करने की आवश्यकता है! और आपके राज्य में मैं यह नहीं कर सकता! – user3571201

+2

@user: आप हेडर में नहीं कर सकते हैं। बी, (.cpp) की कार्यान्वयन फ़ाइल में, आप दोनों शीर्षलेखों को शामिल कर सकते हैं, जिस बिंदु पर आप ए – Cameron

+0

@ उपयोगकर्ता 3571201 में सभी विधियों और सदस्यों तक पहुंच सकते हैं, आप कक्षा 'बी' में कक्षा' ए' के कार्यों का उपयोग करते हैं। सदस्य का कार्य? यदि ऐसा है, तो आप 'बी' के सदस्य कार्यों को 'B.cpp' में परिभाषित कर सकते हैं, जिसमें 'एएच'' शामिल है। – songyuanyao

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