Buenas, mi problema es el siguiente, necesito crear un método constante que me devuelva un objeto de la clase const_iterator construido, pero claro, para ello tengo que pasarle una referencia al constructor indicándole a donde tiene que apuntar el puntero que const_iterator tiene en su interior. Esto si cbegin no fuese constante no habríanngún problema, pero tengo que hacerlo con el constante.
Código C++:
Ver originaltemplate <typename Key, typename Def>
typename diccionario<Key,Def>::const_iterator diccionario<Key,Def>::cbegin() const{
// Llamamos al constructor privado que recibe una referencia del primer valor del diccionario
typename diccionario<Key,Def>::const_iterator sal(&dic.at(0));
// Devolvemos el iterador con it_v apuntando al primer valor del dic
return sal;
}
template <typename Key, typename Def>
diccionario<Key,Def>::const_iterator::const_iterator(typename diccionario<Key,Def>::entrada * p_e){
it_v = (pair<const Key,Def> *) p_e; // casting para value_type
}
Cita: g++ -o ejecV2 -D DICC_V2 -std=c++0x ejemplo.cpp -Iinclude
In file included from diccionario.h:214:0,
from ejemplo.cpp:4:
diccionarioV2.hxx: In instantiation of ‘diccionario<Key, Def>::const_iterator diccionario<Key, Def>::cbegin() const [with Key = std::basic_string<char>; Def = int]’:
ejemplo.cpp:50:17: required from here
diccionarioV2.hxx:380:3: error: invalid conversion from ‘const value_type* {aka const std::pair<std::basic_string<char>, int>*}’ to ‘diccionario<std::basic_string<char>, int>::entrada* {aka std::pair<std::basic_string<char>, int>*}’ [-fpermissive]
make: *** [dic2] Error 1
¿A alguien se le ocurre algo?
Forma parte de un ejercicio y se supone que tengo que hacerlo con esas definiciones..., ¿pero cómo construyo el objeto si el método es constante?