Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/11/2014, 01:28
Lifka
 
Fecha de Ingreso: octubre-2014
Mensajes: 13
Antigüedad: 10 años, 1 mes
Puntos: 0
C++ método constante necesita llamar constructor

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 original
  1. template <typename Key, typename Def>
  2. typename diccionario<Key,Def>::const_iterator diccionario<Key,Def>::cbegin() const{
  3.  
  4.   // Llamamos al constructor privado que recibe una referencia del primer valor del diccionario
  5.  
  6.   typename diccionario<Key,Def>::const_iterator sal(&dic.at(0));
  7.  
  8.    // Devolvemos el iterador con it_v apuntando al primer valor del dic
  9.   return sal;
  10. }
  11.  
  12. template <typename Key, typename Def>
  13. diccionario<Key,Def>::const_iterator::const_iterator(typename diccionario<Key,Def>::entrada * p_e){
  14.   it_v =  (pair<const Key,Def> *) p_e; // casting para value_type
  15. }

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?