मेरे पास एक ऐसा प्रोग्राम है जहां मुझे एक बेस क्लास बनाने की आवश्यकता है जिसे एक डीएल और कुछ एप्लिकेशन कोड के बीच साझा किया जाता है। तब मेरे पास दो अलग-अलग व्युत्पन्न कक्षाएं हैं, एक मुख्य आवेदन में डीएल में से एक है। इनमें से प्रत्येक में कुछ स्थिर सदस्य कार्य हैं जो नास वर्ग में डेटा पर काम करते हैं। (उन्हें स्थैतिक होने की आवश्यकता है क्योंकि फ़ंक्शन पॉइंटर्स के रूप में कहीं और उपयोग किया जाता है)। अपने सबसे सरल रूप में मेरी समस्या नीचे दिखाया गया है।क्या मैं व्युत्पन्न कक्षा में स्थिर फ़ंक्शन से बेस क्लास संरक्षित सदस्यों तक पहुंच सकता हूं?
class Base {
protected:
int var ;
};
class Derived : public Base {
static bool Process(Base *pBase) {
pBase->var = 2;
return true;
}
};
मेरे संकलक शिकायत है कि मैं pBase के संरक्षित सदस्यों भले ही व्युत्पन्न बेस के लिए उपयोग की रक्षा की है का उपयोग नहीं कर सकते हैं। क्या इस के आसपास कोई रास्ता है या क्या मैं कुछ गलत समझ रहा हूं? मैं आधार चर सार्वजनिक कर सकता हूं लेकिन यह मेरे वास्तविक उदाहरण के रूप में खराब होगा क्योंकि यह आवंटित स्मृति का एक टुकड़ा है और इसे बहुसंख्यक के लिए संरक्षित करने के लिए सेफफोर्स हैं।
सहायता?
[माता पिता की रक्षा की चर को एक्सेस करना] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/4829518/accessing-parents-protected-variables)। यह विशेष रूप से यह नहीं है कि फ़ंक्शन 'स्थैतिक' है, लेकिन ऐसा इसलिए है क्योंकि जिस पैरामीटर के आधार पर आधार सदस्य का उपयोग किया जा रहा है वह 'व्युत्पन्न' प्रकार का नहीं है। –
फ़ंक्शन पॉइंटर की कॉलिंग आवश्यकताओं के अनुरूप स्थिर फ़ंक्शन का तर्क बेस क्लास का होना चाहिए। हो सकता है कि मैं इसे गतिशील कास्ट –
का उपयोग करके प्राप्त कर सकूं यदि आप यह नियंत्रित कर सकते हैं कि फ़ंक्शन को केवल 'बेस' ऑब्जेक्ट्स के पॉइंटर्स के साथ बुलाया जाता है जो 'व्युत्पन्न' ऑब्जेक्ट्स के बेस क्लास उप-ऑब्जेक्ट्स हैं जिन्हें आप परिवर्तित करने के लिए 'static_cast' का उपयोग कर सकते हैं फ़ंक्शन बॉडी में 'बेस *' 'व्युत्पन्न *' '। अन्यथा आपको 'बेस' का 'मित्र' होना होगा या आप सार्वजनिक होने के लिए 'var' बदल सकते हैं। यदि आप इनमें से कोई भी नहीं कर सकते हैं तो आप अटक गए हैं। –