2012-04-16 8 views
109

Come posso passare un puntatore (Object *ob) a una funzione il cui prototipo è void foo(Object &)?Come eseguire il cast/convertire il puntatore in riferimento in C++

+0

Il titolo dice "cast [sic] riferimento al puntatore", ma la domanda inizia con un puntatore e ha bisogno di un riferimento. In che direzione è? – MSalters

+0

@MSalters dovrebbe essere * convert *. Lo sto modificando. Ma stavo cercando qualsiasi soluzione, quindi ho citato * cast * – Dewsworld

risposta

147

chiamare in questo modo:

foo(*ob); 

Si noti che non v'è alcuna fusione succedendo qui, come suggerito nel titolo domanda. Tutto ciò che abbiamo fatto è de-referenziare il puntatore all'oggetto che poi passiamo alla funzione.

+18

@Ricobob Ecco cosa succede su SO così spesso. Le risposte a semplici domande che possono essere facilmente comprese spesso raccolgono molti voti. Le risposte lunghe e complesse a domande complicate ottengono spesso pochi voti perché gli elettori non possono facilmente giudicare il merito. Per quanto riguarda il rappresentante, non ho ottenuto nulla su questo a causa del rep cap. ;-) Ma sono d'accordo Vorrei che le risposte complesse abbiano ottenuto più ripetizioni. –

+0

@DavidHeffernan Sì, questo sembra essere il problema - immagino sia un problema da prendere in MetaSO - se qualcuno non lo ha già fatto. – Ricibob

+0

@ricobob Mi aspetto che sia già stato sollevato. –

31
foo(*ob); 

+0

indovinando e aggiungendo un sacco di ... non è solitamente il formato di una buona risposta qui (anche se è corretto in questo caso), questo è probabilmente il motivo per cui hai ottenuto un downvote. – KillianDS

+5

bhhaaa, ho aggiunto il "Credo" perché mi ha fatto scrivere almeno 30 caratteri. anche questo è il modo in cui aggiungo "..........." –

+10

@RoeeGavirel Sono il tuo primo elettore perché ho sentito il downvote essere duro. FWIW puoi superare il limite di 30 caratteri ma aggiungere un commento HTML che ho fatto in la mia prima versione della risposta! La mia modifica alla tua risposta mostra come. –

0

esempio completo per la fusione puntatore a oggetto

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

Sono stupito che onlinegdb funzioni con questo, poiché qui ci sono molti problemi. In primo luogo, myPointer non è inizializzato - dov'è il 'new myClass()'? In secondo luogo, la linea contrassegnata da // // Cast puntatore a oggetto' esegue tale operazione e quindi esegue una copia. Costruire un'altra myClass dal puntatore non inizializzato dereferenziato e quindi (a seconda del compilatore) quando viene assegnato a myClass myObject. –

Problemi correlati