elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [?] Error passing xxx as 'this' argument of xxx discards qualifiers
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [?] Error passing xxx as 'this' argument of xxx discards qualifiers  (Leído 2,408 veces)
k3r00t

Desconectado Desconectado

Mensajes: 17



Ver Perfil
[?] Error passing xxx as 'this' argument of xxx discards qualifiers
« en: 5 Julio 2012, 18:23 pm »

Estoy sobrecargando el operador de asignación en una clase fecha que he creado y me lanza este error. La primera vez compilo y me funciono perfecto, luego me empezo a aparecer este error y no tengo ni idea. Creo que el error viene dado por llamar como const a algo que no lo es, si me pueden ayudar se los agradeceria!

Código
  1. #ifndef FECHA_H
  2. #define FECHA_H
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. class Fecha
  8. {
  9.  //Atributos de la clase
  10.  private:
  11.    int dia,mes,ano;
  12.  //Metodos de la clase
  13.  public:
  14. Fecha() : dia(0),mes(0),ano(0){};
  15. Fecha(int dia_,int mes_,int ano_) : dia(dia_),mes(mes_),ano(ano_){};
  16. Fecha(Fecha &F);
  17. void set_dia(int dia_);
  18. void set_mes(int mes_);
  19. void set_ano(int ano_);
  20. int get_dia();
  21. int get_mes();
  22. int get_ano();
  23.        Fecha& operator=(const Fecha&f); // operador de asignación
  24. ~Fecha();
  25. //Sobrecarga del operador <<
  26. friend ostream& operator<<(ostream &os,const Fecha &F){
  27.  
  28.        os << F.get_dia() << "/" << F.get_mes() << "/" << F.get_ano() << endl;
  29.        return(os);
  30. }
  31. };
  32.  
  33. /* Definicion de metodos*/
  34.  
  35. //Modificar el dia
  36. void Fecha::set_dia(int dia_){dia = dia_;}
  37. //Modificar el mes
  38. void Fecha::set_mes(int mes_){mes = mes_;}
  39. //Modificar el ano
  40. void Fecha::set_ano(int ano_){ano = ano_;}
  41. //Obtener el dia
  42. int Fecha::get_dia(){return dia;}
  43. //Obtener el mes
  44. int Fecha::get_mes(){return mes;}
  45. //Obtener el ano
  46. int Fecha::get_ano(){return ano;}
  47. //Constructor copia
  48. Fecha::Fecha(Fecha &F)
  49. {
  50.  dia = F.get_dia();
  51.  mes = F.get_mes();
  52.  ano = F.get_ano();
  53. }
  54. //Operador de asignacion
  55. Fecha& Fecha::operator=(const Fecha&f){
  56.  
  57.   if(this != &f){
  58.      this->set_dia(f.get_dia());
  59.      this->set_mes(f.get_mes());
  60.      this->set_ano(f.get_ano());    
  61.  
  62.   }  
  63.   return *this;    
  64. }
  65. //Destructor
  66. Fecha::~Fecha(){}
  67. #endif  //FECHA_H


En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: [?] Error passing xxx as 'this' argument of xxx discards qualifiers
« Respuesta #1 en: 5 Julio 2012, 18:50 pm »

¡Buenas!

Si mal no recuerdo, para que para poder utilizar funciones miembro sobre objetos constantes tienes que añadir el calificador const despues del prototipo de la funcion. Esto estara indicando que la funcion no modifica los atributos de la clase. Si una funcion modifica estos atributos no podras delararla constante, y no podras untilizarla sobre objetos constantes, pero los metodos get si que podras utilizarlos, por lo que los prototipos deberian de ser:
Código
  1. int get_dia() const;
  2. int get_mes() const;
  3. int get_ano() const;
  4.  

Prueba a hacer este cambio y nos cuentas.

¡Saludos!

PD: Tambien tienes que añadir el const cuando implementes las fuciones:
Código
  1. int Fecha::get_dia() const {//tu codigo}
  2. int Fecha::get_mes() const {//tu codigo}
  3. int Fecha::get_ano() const {//tu codigo}
  4.  


« Última modificación: 5 Julio 2012, 18:55 pm por do-while » En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
k3r00t

Desconectado Desconectado

Mensajes: 17



Ver Perfil
Re: [?] Error passing xxx as 'this' argument of xxx discards qualifiers
« Respuesta #2 en: 5 Julio 2012, 18:56 pm »

¡Buenas!

Si mal no recuerdo, para que para poder utilizar funciones miembro sobre objetos constantes tienes que añadir el calificador const despues del prototipo de la funcion. Esto estara indicando que la funcion no modifica los atributos de la clase. Si una funcion modifica estos atributos no podras delararla constante, y no podras untilizarla sobre objetos constantes, pero los metodos get si que podras utilizarlos, por lo que los prototipos deberian de ser:
Código
  1. int get_dia() const;
  2. int get_mes() const;
  3. int get_ano() const;
  4.  

Prueba a hacer este cambio y nos cuentas.

¡Saludos!

PD: Tambien tienes que añadir el const cuando implementes las fuciones.

Efectivamente eso era, lo peor es que lo había hecho antes y no lo recordaba jaja, Muchas gracias!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Argument count
PHP
Wdeah 2 1,956 Último mensaje 17 Diciembre 2006, 23:32 pm
por Ertai
Argument Injection - Basic
Nivel Web
Dedal0 4 3,134 Último mensaje 6 Diciembre 2009, 20:40 pm
por WHK
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL
PHP
virginiamedina_8 4 6,673 Último mensaje 12 Febrero 2010, 19:57 pm
por Nakp
Run-time error '5': Invalid procedure call or argument
Programación Visual Basic
suarex 7 14,536 Último mensaje 12 Mayo 2011, 19:50 pm
por suarex
Que significa el error bison: m4: invalid argument
Programación General
d91 0 2,223 Último mensaje 15 Junio 2014, 13:19 pm
por d91
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines