ayuda para corregir un codigo que tengo

karla
30 de Junio del 2004
este es el codigo tengo un error de compilacion y no he dado con el... ayudenme en borland c++ :

// clase usuario

class Usuario
{
protected:
char *nombre, *apellidos;
int CI;

public:
Usuario();
Usuario(char *aNombre, char *aApellidos, int aCI);
void setNombre(char *aNombre);
void setApellidos(char *aApellidos);
void setCI(int aCI);
char *getNombre();
char *getApellidos();
int getCI();
};

// implementacion de la clase usuario

Usuario::Usuario()
{
nombre= "";
apellidos= "";
CI= 0;
};

Usuario::Usuario(char *aNombre, char *aApellidos, int aCI)
{
nombre= new char[50];
strcpy(nombre,aNombre);

apellidos= new char[50];
strcpy(apellidos,aApellidos);

CI= aCI;
};

void Usuario::setNombre(char *aNombre)
{
nombre=aNombre;
};

void Usuario::setApellidos(char *aApellidos)
{
apellidos=aApellidos;
};

void Usuario::setCI(int aCI)
{
CI= aCI;
};

char *Usuario::getNombre()
{
return nombre;
};

char *Usuario::getApellidos()
{
return apellidos;
};

int Usuario::getCI()
{
return CI;
};

//-----------------------------------------------------------------------------------------------------------------

// clase Taxi

enum EDestino
{
Norte= 1, Sur, Oeste, Este, Litoral
};

enum EEStado
{
Reservado=1, Libre
};

class Taxi
{
protected:
EDestino ruta;
EEStado estado;
float pago;

public:
Taxi();
Taxi(EDestino aRuta);

void setRuta(EDestino aRuta);
EDestino getRuta();

void setEstado(EEStado aEstado);
EEStado getEstado();


};

// implentacion de la clase taxi


Taxi::Taxi()
{

};

Taxi::Taxi(EDestino aRuta)
{
ruta= aRuta;
};

void Taxi::setRuta(EDestino aRuta)
{
ruta= aRuta;
};

EDestino Taxi::getRuta()
{
return ruta;
};

void Taxi::setEstado(EEStado aEstado)
{
estado= aEstado;
};

EEStado Taxi::getEstado()
{
return estado;
};

//----------------------------------------------------------------------------------------------------------------


// clase Base (es la principal)

#include "taxi_vehiculo.h"
#include "usuario.h"
//---------------------------------------------------------------------------
// el estado del taxi es el 1, para Libre, y 2, para Ocupado

const int cant_maxi_usuarios= 1000;

typedef struct
{
Taxi taxi[15];
Usuario usuarios[cant_maxi_usuarios];
}SBase;


class Base
{
protected:
Taxi taxi[15];
Usuario usuarios[cant_maxi_usuarios];
int cant_usuarios;
int taxis_ocupados, taxis_libres;

public:
Base();
Base(SBase s);
void ReservarTaxi(Usuario usuario, EDestino ruta);
void CancelarTaxi(char *nombre, EDestino ruta);
int getCantidadTaxisLibres();
int getCantidadTaxisReservados();
int getCantidadUsuarios();
EEStado getSituacionTaxi(int posicion);
void EliminarUsuario(char *nombre);
bool Buscar(char *nombre);

SBase getRegistro();
};

// implementacion de la clase Base


Base::Base()
{
taxis_libres= 15;
taxis_ocupados= 0;
for (int i=0; i<getCantidadTaxisLibres();i++)
taxi[i].setEstado(Libre);
};

Base::Base(SBase s)
{
for (int i=0;i<cant_usuarios;i++)
{
usuarios[i]= s.usuarios[i];
taxi[i]= s.taxi[i];
}
};

void Base::ReservarTaxi(Usuario usuario, EDestino ruta)
{
if (getCantidadTaxisLibres()<= 15)
for (int i=0; i<getCantidadTaxisLibres();i++)
if (getSituacionTaxi(i)== 1)
{
usuarios[i]= usuario;
taxi[i].setRuta(ruta);
taxi[i].setEstado(Reservado);
taxis_libres--;
taxis_ocupados++;
}
else
throw "no se puede reservar";
};

void Base::CancelarTaxi(char *nombre, EDestino ruta)
{
for (int i=0;i<getCantidadTaxisReservados();i++)
if (taxi[i].getRuta()==ruta /* && usuarios[i]==usuario */)
taxi[i].setEstado(Libre);
EliminarUsuario(nombre);
};

int Base::getCantidadTaxisLibres()
{
for (int i=0; i<15;i++)
if (taxi[i].getEstado()== Libre)
taxis_libres++;

return taxis_libres;
};

int Base::getCantidadTaxisReservados()
{
for (int i=0; i<15;i++)
if (taxi[i].getEstado()== Reservado)
taxis_ocupados++;

return taxis_ocupados;
};

EEStado Base::getSituacionTaxi(int posicion)
{
return taxi[posicion].getEstado();
};

void Base::EliminarUsuario(char *nombre)
{
for (int i= 0;i<cant_usuarios;i++)
if (usuarios[i].getNombre()== nombre)
usuarios[i++]=usuarios[i];
cant_usuarios--;
};

bool Base::Buscar(char *nombre)
{
for (int i=0;i<cant_usuarios;i++)
if (usuarios[i].getNombre()== nombre)
return true;
return false;
};

int Base::getCantidadUsuarios()
{
return cant_usuarios;
};

SBase Base::getRegistro()
{
SBase s;
for (int i=0;i<cant_usuarios;i++)
{
s.taxi[i]= taxi[i];
s.usuarios[i]= usuarios[i];
}

return s;
};

//------------------------------------------------------------------------------------------------------------------


// programa principal

#include "base.h"
#include <iostream.h>
#include <conio.h>
//---------------------------------------------------------------------------

int menu();
int Reservar();
int Cancelar();
int Guardar();
int Leer();

Base base;
char nombre[50], apellidos[50];
int CI;
EDestino ruta;
Usuario nuevo;
Taxi taxi;

int main()
{
menu();

return 0;
}
//---------------------------------------------------------------------------

int menu()
{
char opcion;

cout<<" BASE DE TAXIS";
cout<<"nn 1. Reservar";
cout<<"n 2. Cancelar";
cout<<"n 3. Ver cantidad de usuarios";
cout<<"n 4. Guardar en archivo";
cout<<"n 5. Leer de archivo";
cout<<"n 6. Salir";
cout<<"nn su opcion es>> ";
cin>>opcion;
switch(opcion)
{
case 1:
clrscr();
Reservar();
break;
case 2:
clrscr();
Cancelar();
break;
case 3:
clrscr();
cout<<"han reservado "<<base.getCantidadUsuarios()<<"
usuario(s).n";
system("pause");
break;
case 4:
clrscr();
Guardar();
break;
case 5:
clrscr();
Leer();
break;
case 6:
exit(0);
}
return 0;
};
//---------------------------------------------------------------------------
int Reservar()
{
cout<<"deme a continuacion los datos del clienten";
cout<<"nombre>> ";
cin>>nombre;
nuevo.setNombre(nombre);

cout<<"napellidos>> ";
cin>>apellidos;
nuevo.setApellidos(apellidos);

cout<<"n ruta a seguir(Norte, sur, Oeste, Este, Litoral)>> ";
cin>> ruta;
taxi.setRuta(ruta);

base.ReservarTaxi(nuevo,ruta);
cout<<"n ud ha reservado.n";
system("pause");
return 0;
};
//---------------------------------------------------------------------------
int Cancelar()
{
clrscr();
cout<<"deme a continuacion los datos del clienten";
cout<<"nombre>> ";
cin>>nombre;
cout<<"napellidos>> ";
cin>>apellidos;
cout<<"deme la ruta>> ";
cin>>ruta;

if (base.Buscar(nombre)== false)
{
cout<<"el usuario no existe";
system("pause");
}
else
{
base.CancelarTaxi(nombre,ruta);
cout<<"nReservacion cancelada.n";
system("pause");
}
return 0;
};

javi
30 de Junio del 2004
Usas cin para ruta ,pero ruta es una constante enum ,no puedes meter cosas nuevas en una constante .Puedes solucionarlo con una vble int por ej:
int iruta;
cin>>iruta:
for(i=1;i<=5;i++)
if(iruta==i)
int(ruta)=i;
y asi al final en ruta tienes el valor entre 1-5 que buscas