2012-04-16 15 views
109

में पॉइंटर को संदर्भ में परिवर्तित/परिवर्तित करने के लिए कैसे करें मैं एक पॉइंटर (Object *ob) को उस फ़ंक्शन में कैसे पास कर सकता हूं जो प्रोटोटाइप void foo(Object &) है?सी ++

+0

शीर्षक "सूचक के संदर्भ में डाली [वैसा]" कहते हैं लेकिन सवाल एक सूचक के साथ शुरू होता और एक संदर्भ की जरूरत है। यह कौन सी दिशा है? – MSalters

+0

@MSalters यह * कन्वर्ट * होना चाहिए। मैं इसे संपादित कर रहा हूँ। लेकिन मैं जो भी समाधान प्राप्त कर रहा था, उसे ढूंढ रहा था, इसलिए मैंने * कास्ट * – Dewsworld

उत्तर

147

इसे इस तरह कॉल:

foo(*ob); 

ध्यान दें, कोई कास्टिंग यहाँ पर जा रहा है कि वहाँ के रूप में अपने प्रश्न शीर्षक में सुझाव दिया। हमने जो कुछ किया है वह ऑब्जेक्ट को पॉइंटर का संदर्भित करता है जिसे हम फ़ंक्शन पर पास करते हैं।

+18

@ रिकोबोब का उल्लेख किया है जो अक्सर इतनी बार होता है। सरल प्रश्नों के उत्तर जिन्हें आसानी से समझा जा सकता है अक्सर बहुत सारे वोट प्राप्त करते हैं। मुश्किल सवालों के लंबे और जटिल जवाब अक्सर कुछ अपवॉट प्राप्त करते हैं क्योंकि मतदाता आसानी से योग्यता का न्याय नहीं कर सकते हैं। प्रतिनिधि के लिए, मुझे रेप कैप की वजह से कुछ भी नहीं मिला। ;-) लेकिन मैं दिल से सहमत हूं। मैं चाहता हूं कि जटिल उत्तर अधिक प्रतिनिधि प्राप्त करें। –

+0

@ डेविड हेफरन हां यह समस्या है - मुझे लगता है कि मेटासो को लेने का यह मुद्दा है - अगर किसी ने इसे पहले से नहीं उठाया है। – Ricibob

+0

@ricobob मुझे उम्मीद है कि यह पहले से ही उठाया गया है। –

31
foo(*ob); 

+0

अनुमान लगाया गया amd बहुत सारे जोड़ना ... आमतौर पर एक अच्छे उत्तर का प्रारूप नहीं है यहां (भले ही यह इस मामले में सही है), शायद यही कारण है कि आपको एक डाउनवोट क्यों मिला। – KillianDS

+5

भ्हा, मैंने "मुझे लगता है" जोड़ा क्योंकि यह मुझे कम से कम 30 वर्ण लिखता है। यही तरीका है कि मैं "..........." –

+10

@RoeeGavirel जोड़ता हूं, मैं आपका पहला अप-मतदाता हूं क्योंकि मुझे लगता है कि डाउनवॉट कठोर होना है। एफडब्ल्यूआईडब्ल्यू आप 30 चार सीमा से अधिक प्राप्त कर सकते हैं लेकिन एक HTML टिप्पणी जोड़ना जो मैंने किया उत्तर का मेरा पहला संस्करण! आपके उत्तर में मेरा संपादन दिखाता है कि कैसे। –

0

सूचक कास्टिंग के लिए पूर्ण उदाहरण आपत्ति उठाने

Online demo

class myClass 
{ 
    public: 
    void sayHello() 
    { 
    cout << "Hello"; 
    } 
}; 

int main() 
{ 
    myClass* myPointer; 
    myClass myObject = myClass(* myPointer); // Cast pointer to object 
    myObject.sayHello(); 

    return 0; 
} 
+0

मुझे आश्चर्य है कि ऑनलाइन जीडीबी इस के साथ काम करता है, क्योंकि यहां कई समस्याएं हैं। सबसे पहले, मेरा सूचक अनियंत्रित है - 'नया myClass() 'कहां है? दूसरी बात, 'ऑब्जेक्ट पर कास्ट पॉइंटर ऑब्जेक्ट' चिह्नित रेखा और फिर प्रतिलिपि बनाने का एक गुच्छा करता है। DeClferenced uninitialised सूचक से एक और myClass का निर्माण, और उसके बाद (कंपाइलर के आधार पर) जब यह myClass myObject को सौंपा गया है। –