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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


  Mostrar Mensajes
Páginas: 1 [2]
11  Programación / Programación C/C++ / Re: Pasar 'this' como parametro en: 2 Abril 2014, 23:11 pm
Código
  1. Usuario* pU;
  2. pU = new Usuario("pperez","Perico","Perez Palotes","13 Rue del Percebe","pedrofueacomprarpan");
  3.    try {
  4. const Tarjeta t(numer,*pU,Fecha(6,5,2020));
  5.    }  catch (Tarjeta::Caducada e) {
  6. cerr << "Excepcion: Tarjeta caducada " << e.cuando() <<endl;
  7.    }
12  Programación / Programación C/C++ / Pasar 'this' como parametro en: 2 Abril 2014, 21:44 pm
Buenas,

Estoy realizando una clase Tarjeta, la cual tiene el siguiente constructor:
Código
  1. #include "tarjeta.h"
  2. #include "usuario.h"
  3.  
  4. using namespace std;
  5.  
  6. Tarjeta::Tarjeta (const Numero& numero, const Usuario &user, const Fecha& caducidad) : numero_(numero), user_(&user), caducidad_(caducidad) {
  7.  Fecha f_actual;
  8.  titular_ = user.nombre() + " " + user.apellidos();
  9.  
  10.  if (caducidad_ < f_actual)
  11.    throw(Tarjeta::Caducada(caducidad_));
  12.  //(&user).es_titular_de(*this);
  13. }
  14.  

Por otro lado, aquí tenemos la cabecera tarjeta.h

Código
  1. #ifndef _TARJETA_H_
  2. #define _TARJETA_H_
  3.  
  4. #include "fecha.h"
  5. #include "cadena.h"
  6. #include "numero.h"
  7.  
  8. class Usuario;
  9.  
  10. class Tarjeta {
  11. public:
  12.  class Caducada {
  13.  public:
  14.    Caducada (const Fecha& f) : fecha_(f) {}
  15.    Fecha cuando() const { return fecha_; }
  16.  private:
  17.    Fecha fecha_;
  18.  };
  19.  
  20.  Tarjeta (const Numero&, const Usuario&, const Fecha&);
  21.  
  22.  Numero numero() const { return numero_; }
  23.  Fecha caducidad() const { return caducidad_; }
  24.  Cadena titular_facial() const { return titular_; }
  25.  const Usuario* titular() const { return user_; }
  26.  void anula_titular();
  27.  
  28.  friend std::ostream& operator << (std::ostream&, const Tarjeta&);
  29. private:
  30.  Numero numero_; //Numero de identificacion de la tarjeta
  31.  const Usuario * const user_; //Puntero constante al usuario dueño
  32.  Fecha caducidad_; //Fecha de caducidad
  33.  Cadena titular_; // Nombre y apellidos del dueño
  34.  
  35.  Tarjeta (const Tarjeta&);//Deshabilitamos copia de una tarjeta
  36. };
  37. #endif

Y por otro lado, los archivos de USUARIO:

Código
  1. #ifndef _USUARIO_H_
  2. #define _USUARIO_H_
  3.  
  4. #include "cadena.h"
  5. #include "clave.h"
  6. #include "articulo.h"
  7. #include "tarjeta.h"
  8. #include "numero.h"
  9.  
  10. #include <sstream> //ostringstream
  11. #include <map>
  12. #include <set>
  13. using std::map;
  14. using std::set;
  15.  
  16. class Tarjeta;
  17.  
  18. class Usuario {
  19. public:
  20.  //CONSTRUCTOR Y DESTRUCTOR
  21.  Usuario (const Cadena&, const Cadena&, const Cadena&, const Cadena&, const char*);
  22.  //~Usuario();
  23.  
  24.  class Id_duplicado {
  25.  public:
  26.    Id_duplicado (const Cadena& id) : id_duplicado(id) {}
  27.    const Cadena idd() { return id_duplicado; }
  28.  private:
  29.    const Cadena id_duplicado;
  30.  };
  31.  //FUNCIONES OBSERVADORAS
  32.  Cadena id() const { return identificador_; }
  33.  Cadena nombre() const { return nombre_; }
  34.  Cadena apellidos() const { return apellidos_; }
  35.  Cadena direccion() const { return direccion_; }
  36.  Cadena password() const { return password_.clave(); }
  37.  
  38.  //FUNCIONES CON TARJETAS
  39.  typedef map<Numero, Tarjeta*> Tarjetas;
  40.  void es_titular_de(Tarjeta&);
  41.  /*
  42.  
  43.   void no_es_titular_de(Tarjeta&);
  44.   const Tarjetas& tarjetas() const;
  45.   */
  46.  
  47.  //FUNCIONES CON LOS ARTICULOS
  48.  typedef map<Articulo*, unsigned> Articulos;
  49.  void compra(Articulo&, unsigned);
  50.  const Articulos& compra() const { return articulos_; }
  51.  size_t n_articulos() const { return articulos_.size(); }
  52.  
  53.  //SOBRECARGA OPERADOR
  54.  friend std::ostream& operator << (std::ostream&, const Usuario&);
  55.  
  56. private:
  57.  Cadena identificador_;
  58.  Cadena nombre_;
  59.  Cadena apellidos_;
  60.  Cadena direccion_;
  61.  Clave password_;
  62.  /*  
  63.       Tarjetas tarjetas_;*/
  64.  Articulos articulos_;
  65.  
  66.  static set<Cadena> identificadores;
  67.  bool IdValido() const throw(Usuario::Id_duplicado);
  68.  Usuario (const Usuario&); //Deshabilitamos la copia de un usuario
  69. };
  70.  
  71. void mostrar_carro(std::ostringstream&, const Usuario&);
  72. //inline const Tarjetas& tarjetas() const { return tarjetas_; }
  73.  
  74. #endif

El problema es que cada vez que se crea una tarjeta, su constructor, debe asociar al usuario dueño la existencia de dicha tarjeta con la función void es_titular_de(Tarjeta&);

Pero no sé hacerlo ya que me sale un error diciendo:

pasar ‘const Usuario’ como el argumento ‘this’ de ‘void Usuario::es_titular_de(Tarjeta&)’ descarta a los calificadores
Páginas: 1 [2]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines