Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] C++ método constante necesita llamar constructor

Estas en el tema de C++ método constante necesita llamar constructor en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 28/11/2014, 01:28
 
Fecha de Ingreso: octubre-2014
Mensajes: 13
Antigüedad: 10 años
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?
  #2 (permalink)  
Antiguo 28/11/2014, 02:23
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: C++ método constante necesita llamar constructor

Si el parámetro que recibe es constante... cambia la firma para que sea igualmente constante:

Código C++:
Ver original
  1. template <typename Key, typename Def>
  2. diccionario<Key,Def>::const_iterator::const_iterator(const typename diccionario<Key,Def>::entrada * p_e){
  3.   it_v =  (pair<const Key,Def> *) p_e; // casting para value_type
  4. }

También puedes usar const_cast para quitar el atributo const... pero es poco recomendable.
  #3 (permalink)  
Antiguo 28/11/2014, 02:52
lareto
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: C++ método constante necesita llamar constructor

Hola; una posibilidad podría ser declarar a tu const_iterator como mutable
  #4 (permalink)  
Antiguo 28/11/2014, 07:27
 
Fecha de Ingreso: octubre-2014
Mensajes: 13
Antigüedad: 10 años
Puntos: 0
Respuesta: C++ método constante necesita llamar constructor

Es que me extraña porque en teoría no debo modificar las definiciones... pero no tiene sentido sino. Así que finalemte he hecho lo que dice eferion que es lo que más lógica tendría.

Gracias y saludos!

Etiquetas: char, clase, constante, constructor, int, necesita
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:29.