me he encontrado con el siguiente error y no sé, por más que busco, dónde está el fallo
M:\MaxHotel\LibroReservas.cpp(151) : error C2678: binary '>>' : no operator defined which takes a left-hand operand of type 'class istream_withassign' (or there is no acceptable conversion)
Adjunto el código para aclararlo más. Gracias por la ayuda.
- Código: Seleccionar todo
// LibroReservas.cpp: implementation of the CLibroReservas class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "MaxHotel.h"
#include "LibroReservas.h"
#include "Habitacion.h"
#include "Reserva.h"
#include <iostream.h>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CLibroReservas::CLibroReservas()
{
}
CLibroReservas::~CLibroReservas()
{
CHabitacion* ptrHabitacion;
int nKey;
POSITION pos;
//destruimos los objetos CHabitacion
pos=m_mapHabitaciones.GetStartPosition();
while(pos)
{
m_mapHabitaciones.GetNextAssoc(pos,nKey,ptrHabitacion);
m_mapHabitaciones.RemoveKey(nKey);
delete ptrHabitacion;
}
}
//añade una nueva habitación al hotel
void CLibroReservas::NuevaHabitacion()
{
int nNumero, nCamas;
bool bAseo,bTelevisor,bClimatizacion;
CHabitacion* ptrHabitacion;
//solicitamos los datos de la nueva habitación
SolicitarDatosHabitacion(nNumero,nCamas,bAseo,bTelevisor,bClimatizacion);
//creamos el objeto Habitacion
ptrHabitacion=new CHabitacion(nNumero, nCamas,bAseo,bTelevisor,bClimatizacion);
if(ptrHabitacion==NULL)
throw"No queda memoria disponible";
else
{
//añadimos la habitación al map de habitaciones
m_mapHabitaciones.SetAt(ptrHabitacion->NumeroHabitacion(),ptrHabitacion);
}
}
//realiza si es posible una nueva reserva
void CLibroReservas::RealizarReserva()
{
int nCamas,nNumeroHabitacion;
bool bAseo,bTelevisor,bClimatizacion;
char cTemp;
CString szCliente;
COleDateTime dtLlegada, dtSalida;
CHabitacion* ptrHabitacion;
CArray<CHabitacion*,CHabitacion*&>aHabitaciones;
//solicitamos las características de la habitacion
SolicitarDatosReserva(nCamas,bAseo,bTelevisor,bClimatizacion,dtLlegada,dtSalida,szCliente);
//obtenemos el array de habitaciones libres que cumplen estas características
ObtenerHabitacionesLibres(nCamas,bAseo,bTelevisor,bClimatizacion,dtLlegada,dtSalida,aHabitaciones);
//si no hay ninguna habitación libre avisamos al usuario
if(aHabitaciones.GetSize()==0)
{
cout<<"No hay ninguna habitacion libre para la fecha indicada.\n";
cin>>cTemp;
}
else
{
cout<<"Estas son las habitaciones disponibles\n\n";
//listamos las habitaciones libres
ListarNumeroHabitaciones(aHabitaciones);
//solicitamos el número de la habitación deseada
cout<<"\nSeleccione una habitacion de la lista: ";
cin>>nNumeroHabitacion;
if(m_mapHabitaciones.Lookup(nNumeroHabitacion,ptrHabitacion))
{
ptrHabitacion->NuevaReserva(szCliente,dtLlegada,dtSalida);
cout<<"\nLa reserva se ha realizado satisfactoriamente.\n";
}
else
cout<<"\nHa introducido un numero de habitacion incorrecto\n";
cout<<"\nPulse 'c' y return para continuar\n";
cin>>cTemp;
}
}
void CLibroReservas::ListarReservas()
{
CHabitacion* ptrHabitacion;
int nKey;
POSITION pos;
char cTemp;
pos=m_mapHabitaciones.GetStartPosition();
while(pos)
{
m_mapHabitaciones.GetNextAssoc(pos,nKey,ptrHabitacion);
ptrHabitacion->ListarReservas();
cout<<"\n\n";
}
cout<<"\nPulse 'c' y return para continuar\n";
cin>>cTemp;
}
void CLibroReservas::ListarHabitaciones()
{
CHabitacion* ptrHabitacion;
int nKey;
POSITION pos;
char cTemp;
pos=m_mapHabitaciones.GetStartPosition();
while(pos)
{
m_mapHabitaciones.GetNextAssoc(pos,nKey,ptrHabitacion);
cout<<*ptrHabitacion;
cout<<"\n";
}
cout<<"\nPulse 'c' y return para continuar\n";
cin>>cTemp;
}
/****************PRIMER NIVEL DE DESCOMPOSICION*****************/
//solicita los datos de la habitación
void CLibroReservas::SolicitarDatosHabitacion(int& nNumero,int& nCamas,bool& bAseo,bool &bTelevisor,
bool &bClimatizacion)
{
cout<<"Numero de habitacion: ";
cin>>nNumero;
cout<<"\nNumero de camas: ";
cin>>nCamas;
cout<<"\nAseo (1=SI, 0=NO):";
cin>>bAseo;
cout<<"\nTelevisor (1=SI, 0=NO):";
cin>>bTelevisor;
cout<<"\nClimatizacion (1=SI, 0=NO):";
cin>>bClimatizacion;
}
//solictia los datos de la reserva
void CLibroReservas::SolicitarDatosReserva(int& nCamas,bool &bAseo,bool &bTelevisor,bool &bClimatizacion,
COleDateTime &dtLlegada,COleDateTime &dtSalida,CString szNombre)
{
//cademas de catacteres temporales para capturar las fechas
CString szLlegada, szSalida;
cout<<"Numero de camas:";
cin>>nCamas;
cout<<"\nAseo (1=SI, 0=NO):";
cin>>bAseo;
cout<<"\nTelevisor(1=SI, 0=NO):";
cin>>bTelevisor;
cout<<"\nClimatizacion(1=SI, 0=NO):";
cin>>bClimatizacion;
//solicitamos la fecha de llegada
cout<<"\nFecha de llegada(dd/mm/aa):";
cin>>szLlegada.GetBuffer(30);
szLlegada.ReleaseBuffer(-1);
//solicitamos el nombre del cliente
cout<<"\nNombre del cliente:";
cin>>szNombre.GetBuffer(100);
szNombre.ReleaseBuffer(-1);
//convertimos las cadenas de caracteres con las fechas
//a objetos COleDateTime
dtLlegada.ParseDateTime(szLlegada);
dtSalida.ParseDateTime(szSalida);
}
//coloca en el array los punteros a todas las habitaciones libres en
//las fechas indicadas que cumplen con los requisitos
void CLibroReservas::ObtenerHabitacionesLibres(int nCamas,bool bAseo,bool bTelevisor,bool bClimatizacion,COleDateTime dtLlegada,
COleDateTime dtSalida,CArray<CHabitacion*,CHabitacion*&>&aHabitaciones)
{
CHabitacion* ptrHabitacion;
int nKey;
POSITION pos;
//recoore el map hata que se acaban las habitaciones y añadimos
//al array todas las que cumplen los requisitos y
//están libres entre dtLlegada y dtSalida
pos=m_mapHabitaciones.GetStartPosition();
while(pos)
{
m_mapHabitaciones.GetNextAssoc(pos,nKey,ptrHabitacion);
if(ptrHabitacion->CoincidenCaracteristicas(nCamas,bAseo,bTelevisor,bClimatizacion)&&ptrHabitacion->Libre(dtLlegada,dtSalida))
{
aHabitaciones.Add(ptrHabitacion);
}
}
}
//lista las habitaciones del array
void CLibroReservas::ListarNumeroHabitaciones(CArray<CHabitacion*,CHabitacion*&>& aHabitaciones)
{
CHabitacion* ptrHabitacion;
for(int nIndice=0;nIndice<=aHabitaciones.GetUpperBound();nIndice++)
{
ptrHabitacion=aHabitaciones.GetAt(nIndice);
cout<<ptrHabitacion->NumeroHabitacion()<<"\n";
}
}





