2012-04-16 12 views
109

¿Cómo puedo pasar un puntero (Object *ob) a una función cuyo prototipo es void foo(Object &)?Cómo convertir/convertir el puntero a referencia en C++

+0

El título dice "echar [sic] referencia a puntero" pero la pregunta comienza con un puntero y necesita una referencia. ¿Qué dirección es? – MSalters

+0

@MSalters debe ser * convert *. Lo estoy editando. Pero estaba buscando cualquier solución que obtuviera, así que mencioné * cast * – Dewsworld

Respuesta

147

llamada así:

foo(*ob); 

Tenga en cuenta que no hay fundición pasando aquí, como se sugiere en el título de la pregunta. Todo lo que hemos hecho es desviar el puntero al objeto que luego pasamos a la función.

+18

@Ricobob Eso es lo que sucede en SO muy a menudo. Las respuestas a preguntas simples que se pueden entender fácilmente a menudo obtienen muchos votos positivos. Las respuestas largas y complejas a las preguntas engañosas a menudo obtienen pocos votos favorables porque los votantes no pueden juzgar fácilmente el mérito. En cuanto a rep, no obtuve nada sobre esto debido a rep cap. ;-) Pero sinceramente estoy de acuerdo. Ojalá respuestas complejas obtuvieran más representantes. –

+0

@DavidHeffernan Sí, este parece ser el problema, creo que es un problema para MetaSO, si alguien no lo ha planteado allí. – Ricibob

+0

@ricobob Espero que ya se haya planteado. –

31
foo(*ob); 

+0

adivinar y agregar muchas ... por lo general no es el formato de una buena respuesta aquí (aunque es correcto en este caso), esa es probablemente la razón por la que obtienes un voto negativo. – KillianDS

+5

bhhaaa, agregué el "supongo" porque me hizo escribir al menos 30 caracteres. esa es también la forma en que agrego el "..........." –

+10

@RoeeGavirel Soy su primer votante porque sentí que el voto negativo es duro. FWIW puedes superar el límite de 30 caracteres pero agregar un comentario HTML que hice en mi primera versión de la respuesta! Mi edición de tu respuesta muestra cómo. –

0

Ejemplo completo para la fundición de puntero al objeto

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

Me sorprende que en líneagdb funcione con esto, ya que hay muchos problemas aquí. En primer lugar, myPointer no está inicializado, ¿dónde está el 'new myClass()'? En segundo lugar, la línea marcada como '// Cast puntero al objeto' lo hace y luego hace un montón de copias. Construir otro myClass desde el puntero sin inicializar desreferenciado y luego (dependiendo del compilador) cuando se asigna a myClass myObject. –

Cuestiones relacionadas