[?] Error passing xxx as 'this' argument of xxx discards qualifiers

Iniciado por k3r00t, 5 Julio 2012, 18:23 PM

0 Miembros y 1 Visitante están viendo este tema.

k3r00t

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 (cpp) [Seleccionar]
#ifndef FECHA_H
#define FECHA_H
#include <iostream>

using namespace std;

class Fecha
{
 //Atributos de la clase
 private:
   int dia,mes,ano;
 //Metodos de la clase
 public:
Fecha() : dia(0),mes(0),ano(0){};
Fecha(int dia_,int mes_,int ano_) : dia(dia_),mes(mes_),ano(ano_){};
Fecha(Fecha &F);
void set_dia(int dia_);
void set_mes(int mes_);
void set_ano(int ano_);
int get_dia();
int get_mes();
int get_ano();
       Fecha& operator=(const Fecha&f); // operador de asignación
~Fecha();
//Sobrecarga del operador <<
friend ostream& operator<<(ostream &os,const Fecha &F){

       os << F.get_dia() << "/" << F.get_mes() << "/" << F.get_ano() << endl;
       return(os);
}
};

/* Definicion de metodos*/

//Modificar el dia
void Fecha::set_dia(int dia_){dia = dia_;}
//Modificar el mes
void Fecha::set_mes(int mes_){mes = mes_;}
//Modificar el ano
void Fecha::set_ano(int ano_){ano = ano_;}
//Obtener el dia
int Fecha::get_dia(){return dia;}
//Obtener el mes
int Fecha::get_mes(){return mes;}
//Obtener el ano
int Fecha::get_ano(){return ano;}
//Constructor copia
Fecha::Fecha(Fecha &F)
{
 dia = F.get_dia();
 mes = F.get_mes();
 ano = F.get_ano();
}
//Operador de asignacion
Fecha& Fecha::operator=(const Fecha&f){
 
  if(this != &f){
     this->set_dia(f.get_dia());
     this->set_mes(f.get_mes());
     this->set_ano(f.get_ano());    
         
  }  
  return *this;    
}
//Destructor
Fecha::~Fecha(){}
#endif  //FECHA_H

do-while

#1
¡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 (cpp) [Seleccionar]

int get_dia() const;
int get_mes() const;
int get_ano() const;


Prueba a hacer este cambio y nos cuentas.

¡Saludos!

PD: Tambien tienes que añadir el const cuando implementes las fuciones:
Código (cpp) [Seleccionar]

int Fecha::get_dia() const {//tu codigo}
int Fecha::get_mes() const {//tu codigo}
int Fecha::get_ano() const {//tu codigo}
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

k3r00t

Cita de: do-while 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 (cpp) [Seleccionar]

int get_dia() const;
int get_mes() const;
int get_ano() const;


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!!