Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - DvNe

#11
Código (cpp) [Seleccionar]
Usuario* pU;
pU = new Usuario("pperez","Perico","Perez Palotes","13 Rue del Percebe","pedrofueacomprarpan");
    try {
const Tarjeta t(numer,*pU,Fecha(6,5,2020));
    }  catch (Tarjeta::Caducada e) {
cerr << "Excepcion: Tarjeta caducada " << e.cuando() <<endl;
    }
#12
Buenas,

Estoy realizando una clase Tarjeta, la cual tiene el siguiente constructor:
Código (cpp) [Seleccionar]

#include "tarjeta.h"
#include "usuario.h"

using namespace std;

Tarjeta::Tarjeta (const Numero& numero, const Usuario &user, const Fecha& caducidad) : numero_(numero), user_(&user), caducidad_(caducidad) {
  Fecha f_actual;
  titular_ = user.nombre() + " " + user.apellidos();

  if (caducidad_ < f_actual)
    throw(Tarjeta::Caducada(caducidad_));
  //(&user).es_titular_de(*this);
}


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

Código (cpp) [Seleccionar]
#ifndef _TARJETA_H_
#define _TARJETA_H_

#include "fecha.h"
#include "cadena.h"
#include "numero.h"

class Usuario;

class Tarjeta {
public:
  class Caducada {
  public:
    Caducada (const Fecha& f) : fecha_(f) {}
    Fecha cuando() const { return fecha_; }
  private:
    Fecha fecha_;
  };

  Tarjeta (const Numero&, const Usuario&, const Fecha&);
 
  Numero numero() const { return numero_; }
  Fecha caducidad() const { return caducidad_; }
  Cadena titular_facial() const { return titular_; }
  const Usuario* titular() const { return user_; }
  void anula_titular();

  friend std::ostream& operator << (std::ostream&, const Tarjeta&);
private:
  Numero numero_; //Numero de identificacion de la tarjeta
  const Usuario * const user_; //Puntero constante al usuario dueño
  Fecha caducidad_; //Fecha de caducidad
  Cadena titular_; // Nombre y apellidos del dueño

  Tarjeta (const Tarjeta&);//Deshabilitamos copia de una tarjeta
};
#endif


Y por otro lado, los archivos de USUARIO:

Código (cpp) [Seleccionar]
#ifndef _USUARIO_H_
#define _USUARIO_H_

#include "cadena.h"
#include "clave.h"
#include "articulo.h"
#include "tarjeta.h"
#include "numero.h"

#include <sstream> //ostringstream
#include <map>
#include <set>
using std::map;
using std::set;

class Tarjeta;

class Usuario {
public:
  //CONSTRUCTOR Y DESTRUCTOR
  Usuario (const Cadena&, const Cadena&, const Cadena&, const Cadena&, const char*);
  //~Usuario();
 
  class Id_duplicado {
  public:
    Id_duplicado (const Cadena& id) : id_duplicado(id) {}
    const Cadena idd() { return id_duplicado; }
  private:
    const Cadena id_duplicado;
  };
  //FUNCIONES OBSERVADORAS
  Cadena id() const { return identificador_; }
  Cadena nombre() const { return nombre_; }
  Cadena apellidos() const { return apellidos_; }
  Cadena direccion() const { return direccion_; }
  Cadena password() const { return password_.clave(); }

  //FUNCIONES CON TARJETAS
  typedef map<Numero, Tarjeta*> Tarjetas;
  void es_titular_de(Tarjeta&);
  /*
 
  void no_es_titular_de(Tarjeta&);
  const Tarjetas& tarjetas() const;
  */
 
  //FUNCIONES CON LOS ARTICULOS
  typedef map<Articulo*, unsigned> Articulos;
  void compra(Articulo&, unsigned);
  const Articulos& compra() const { return articulos_; }
  size_t n_articulos() const { return articulos_.size(); }

  //SOBRECARGA OPERADOR
  friend std::ostream& operator << (std::ostream&, const Usuario&);
 
private:
  Cadena identificador_;
  Cadena nombre_;
  Cadena apellidos_;
  Cadena direccion_;
  Clave password_;
  /* 
      Tarjetas tarjetas_;*/
  Articulos articulos_;

  static set<Cadena> identificadores;
  bool IdValido() const throw(Usuario::Id_duplicado);
  Usuario (const Usuario&); //Deshabilitamos la copia de un usuario
};

void mostrar_carro(std::ostringstream&, const Usuario&);
//inline const Tarjetas& tarjetas() const { return tarjetas_; }

#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