Programación General => C/C++ => Mensaje iniciado por: diego.martinez en Lunes 1 de Junio de 2009, 10:10
Título: sobrecargar operador []
Publicado por: diego.martinez en Lunes 1 de Junio de 2009, 10:10
Buenas:
estoy sobrecargando el operador [] en una de mis clases (w32Register : public GRegister) para usarla como un mapa.
Código: C++
w32Register Reg;
Reg.Open("SOFTWARE\Empresa");
std::string value=Reg["Root"];
esto funciona correctamente, la clase abre la carpeta del registro y con el operador [] sobrecargado accedo a los valores. Todo correcto. pero si hago :
Código: C++
GRegister * Reg=new w32Register();
Reg->Open("SOFTWARE\AgotekArtek");
std::string value=Reg["Root"];
Si lo uso dinamicamente, el compilador me tira : error C2107: illegal index, indirection not allowed la definicion del operador la he hecho asi:
LONG ret=RegQueryValueEx(hKey,index.c_str(),NULL,&dwType,(LPBYTE)s,&size);
if(ret!=ERROR_SUCCESS)
return0;
S=s;//creamos un std::string con el buffer
return S;//lo pasamos por copia
}
Como puedo hacer que el operador [] funcione con objetos dinamicos? se que podria hacer (*Reg)["root"] pero preferiria poder acceder directamente con los punteros.
Gracias!!
Título: Re: sobrecargar operador []
Publicado por: m0skit0 en Lunes 1 de Junio de 2009, 10:42
Lógico, en el segundo ejemplo que pones, Reg es un puntero, no es un objeto GRegister. Prueba con
Código: C++
std::string value =*Reg["Root"];
A ver qué tal
Título: Re: sobrecargar operador []
Publicado por: diego.martinez en Lunes 1 de Junio de 2009, 11:30
si, ya lo habia probado asi, y funciona, lo que queria saber es si hay forma de indicarle que haga el corchete incluso con punteros, supongo que la respuesta es no <_<