तो मेरे पास यह कोड है:एक पॉइंटर से आधार तक एक पॉइंटर से "अमान्य" व्युत्पन्न करने के लिए static_cast क्यों है?
Node* SceneGraph::getFirstNodeWithGroupID(const int groupID)
{
return static_cast<Node*>(mTree->getNode(groupID));
}
mTree-> getNode (groupID) एक पीसीएसएनोड * देता है। नोड सार्वजनिक रूप से पीसीएसएनोड से लिया गया है।
static_cast पर मिले सभी दस्तावेज़ इस प्रभाव से कुछ कहते हैं: "static_cast ऑपरेटर का संचालन संचालन के लिए किया जा सकता है जैसे एक पॉइंटर को बेस क्लास में एक पॉइंटर में एक व्युत्पन्न वर्ग में परिवर्तित करना।"
फिर भी, एक्सकोड्स (जीसीसी) कंपाइलर का कहना है कि static_cast पीसीएसएनोड * से नोड * तक अमान्य है और इसकी अनुमति नहीं है।
ऐसा कोई कारण क्यों है? जब मैं इसे सी-स्टाइल कास्ट पर स्विच करता हूं, तो कंपाइलर से कोई शिकायत नहीं होती है।
धन्यवाद।
अद्यतन: भले ही प्रश्न का उत्तर दिया गया हो, फिर भी किसी और के पास एक ही समस्या होने पर मैं पूर्णता के लिए कंपाइलर त्रुटि पोस्ट करूंगा:
error: Semantic Issue: Static_cast from 'PCSNode *' to 'Node *' is not allowed
आप सटीक संकलक त्रुटि रख सकते हैं? बस यह सुनिश्चित करने के लिए कि वहां कुछ भी सम्बंधित या समान नहीं है। (आपके द्वारा वर्णित जानकारी के अनुसार इसे काम करना चाहिए) – Shiroko
"नोड सार्वजनिक रूप से पीसीएसएनोड से व्युत्पन्न है" ??? मुझे लगता है कि आपका मतलब है कि "पीसीएसएनओडी' सार्वजनिक रूप से' नोड' से लिया गया है "जैसा कि" नोड' 'पीसीएसएनोड के लिए आधार वर्ग है। " सही? –
पीसीएसएनोड वास्तव में आधार वर्ग है क्योंकि इसमें पेड़ के लिए पॉइंटर्स होते हैं, नोड एक परिवर्तनकारी नोड है जो एक पेड़ में हो सकता है। – alk3ovation