Clase diccionario en el fichero diccionario.h:
Código:
Que contiene la clase anidada:class diccionario;
Código:
La cual está establecida como friend:class iterator;
Código:
Dentro de la parte privada de la clase diccionario:friend class iterator;
Código:
Entrada se corresponde con:vector<entrada> dic;
Código:
Ahora en el archivo diccionario.hxx (el cual está incluido correctamente en el .h y todo lo necesario...), tengo el siguiente método (el cual tiene su correspondiente cabecera en la parte pública de la clase anidada):typedef pair<Key, Def> entrada;
Código:
Este método debería crear un iterador que apunta al primer dato del vector privado de la clase padre.template <typename Key, typename Def> diccionario<Key,Def>::iterator::iterator( );
Este puntero se guarda de la siguiente forma en la parte privada de la clase iterator:
Código:
Lo que quiero hacer en el método es algo como esto:pair<const Key, Def> * it_v;
Código:
dic2 correspondería con el dato privado de la clase diccionario (el vector con la clave y el dato).vector<pair<Key, Def>> dic2; pair<const Key, Def> * it_v2 = (pair<const Key,Def> *) &dic2[0];
pair<const Key, Def> * it_v2 es it_v, de la parte privada de la clase anidada.
(pair<const Key,Def> *) es un casting ya que lo hemos declarado como constante en el iterador, pero el tipo de dato no estaba definido así.
&dic2[0] es &dic[0] la referencia que queremos devolver del dato mencionado anteriormente.
(Todo lo anterior funciona bien)
De modo que lo que quiero hacer es:
Código:
Peeeeero....it_v = (pair<const Key,Def> *) &dic[0];
Cita:
El caso es que desde ese método no puedo acceder a dic (el vector) de ningún modo, esto también devuelve el mismo error:g++ -o ejecV2 -D DICC_V2 -std=c++0x ejemplo.cpp -Iinclude
In file included from ejemplo.cpp:4:0:
diccionarioV2.hxx: In instantiation of ‘diccionario<Key, Def>::iterator::iterator() [with Key = std::basic_string<char>; Def = int]’:
ejemplo.cpp:112:35: required from here
diccionario.h:198:18: error: invalid use of non-static data member ‘diccionario<std::basic_string<char>, int>::dic’
In file included from diccionario.h:213:0,
from ejemplo.cpp:4:
diccionarioV2.hxx:296:7: error: from this location
make: *** [dic2] Error 1
In file included from ejemplo.cpp:4:0:
diccionarioV2.hxx: In instantiation of ‘diccionario<Key, Def>::iterator::iterator() [with Key = std::basic_string<char>; Def = int]’:
ejemplo.cpp:112:35: required from here
diccionario.h:198:18: error: invalid use of non-static data member ‘diccionario<std::basic_string<char>, int>::dic’
In file included from diccionario.h:213:0,
from ejemplo.cpp:4:
diccionarioV2.hxx:296:7: error: from this location
make: *** [dic2] Error 1
Código:
Def a = dic.at(0).second;
No consigo acceder a los datos privados desde la clase amiga anidada, ¿alguien me ayuda?
Espero haberme expresado bien xD Gracias y un saludo.