0

Tengo un puntero doble que apunta a un puntero que a su vez apunta a un objeto. Con el puntero puedo acceder a los métodos del objeto pero con el puntero doble no. Hay manera de hacerlo o se tiene que usar referencias?

Este es un código que lo ejemplifica:

#include <iostream>
#include "objeto.h"
using namespace std;


int main(int argc, char const *argv[])
{
    Objeto **puntD,*dir_obj, n("mesa","madera");

    dir_obj= &n;
    cout<<dir_obj->getNombre()<<endl; //getNombre devuelve un string
    puntD = &dir_obj;
    cout<<puntD->getNombre()<<endl; //Marca error
    return 0;
}

1 Answers1

1

El operador flecha es un azúcar sintáctico de una desreferencia de puntero y un acceso a miembro. Por lo tanto, estas dos instrucciones son equivalentes:

dir_obj->getNombre();

(*dir_obj).getNombre();

Cuando tenemos un doble puntero, la flecha actúa igual:

puntD->getNombre();

Equivale a:

(*puntD).getNombre();

Dado que puntD es un doble puntero (Objeto **), desreferenciarlo una vez nos quita sólo un puntero, el cuál no dispone de la función miembro .getNombre() porque no es un objeto, puedes probar desreferenciando dos veces:

(**puntD).getNombre();
PaperBirdMaster
  • 44,474
  • 6
  • 44
  • 82