Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Proyecto C++ STL

Estas en el tema de Proyecto C++ STL en el foro de C/C++ en Foros del Web. Buenas, estoy realizando un proyecto en C++ y me he topado con un problema que no se solucionar, si me ayudasen les estaría muy agradecido. ...
  #1 (permalink)  
Antiguo 02/09/2009, 05:05
 
Fecha de Ingreso: septiembre-2009
Mensajes: 4
Antigüedad: 14 años, 8 meses
Puntos: 0
Proyecto C++ STL

Buenas, estoy realizando un proyecto en C++ y me he topado con un problema que no se solucionar, si me ayudasen les estaría muy agradecido.

Se trata de una aplicación para gestionar una liga de futbol por medio de listas, usando la colección STL <list>.
La aplicación tiene una interfaz para comunicarse con el usuario, esta interfaz invoca a métodos de una base de datos, que a su vez invoca métodos de una clase lista, que a su vez invoca a métodos de la clase del objeto.

Mi problema es que usando un mismo método en dos sitios distintos, funciona en uno y en otro no.

Les voy a presentar el código a ver si me pueden ayudar:

clase Interfaz.cpp: este es el menu de una de las funciones de la aplicación:

void Interfaz::verEquipo(){
string equipo;
string cod;
int orden = -1;
while ((orden<0)||(orden>3)){
clrscr();
cout << " CONSULTAR EQUIPO" << endl;
cout << "1 Introducir el nombre del equipo" << endl;
cout << "2 Introducir el código del equipo" << endl;
cout << "3 Ver lista de equipos de la liga" << endl;
cout<<"Pulse el numero correspondiente a la accion"<<endl;

orden=leerNum();
switch (orden){
case 1:
cout << "Introduzca el nombre del equipo" << endl;
equipo=leerLinea();
bbdd->consultarEquipoNom(equipo);
break;
case 2:
cout << "Introduzca el codigo del equipo" << endl;
cod=leerLinea();
bbdd->consultarEquipoCod(cod);
break;
case 3:
bbdd->listarEquipos();
cout << "Introduzca el nombre del equipo" << endl;
equipo=leerLinea();
bbdd->consultarEquipoNom(equipo);
break;
default:

cout << "Opcion incorrecta." <endl;
break ;
}
cout << "Pulsa una tecla para continuar." << endl;
_getch();
}


voy a tomar como ejemplo:

bbdd->consultarEquipoCod(cod); // que funciona correctamente

int BaseDeDatos::consultarEquipoCod(string codEquipo){
Equipo *aux = new Equipo(codEquipo, " ");
if(lEquipos.estaEquipo(aux)){
lEquipos.consultar(lEquipos.buscar(aux));
}else{
cout<< "ERROR. El equipo no existe"<<endl;
}
return 0;
}


os pongo el método lEquipos.estaEquipo() y lEquipos.buscar():

bool ListaEquipos::estaEquipo (Equipo *e){
return ListaEquipos::buscar(e)!=NULL;
}

Equipo* ListaEquipos::buscar(Equipo *e){
list<Equipo*>::iterator it;

for (it = listaE.begin(); it != listaE.end(); it++){
if (**it == *e){
return *it;
}
}
return 0; // elemento no encontrado
}

pues bien, aqui viene el problema, el método estaEquipo() funciona correctamente para:

int BaseDeDatos::consultarEquipoCod(string codEquipo){} //que ya les he
//detallado arriba.

pero no funciona para:

int BaseDeDatos::consultarEquipoNom(string nombre){
Equipo *aux = new Equipo(" ", nombre);
if(lEquipos.estaEquipo(aux)){ //**NUNCA ENTRA EN ESTE IF**
lEquipos.consultar(lEquipos.buscar(aux));
}else{
cout<< "ERROR. El equipo no existe"<<endl;
}
return 0;
}

lo mismo ocurre con el método:

int BaseDeDatos::bajaEquipo(string codEquipo, string nombre){
Equipo *aux = new Equipo(codEquipo, nombre);
if(lEquipos.estaEquipo(aux)){
lEquipos.eliminar(lEquipos.buscar(aux));
}else{
cout<< "ERROR. El equipo no existe"<<endl;
}
return 0;
}

he intentado reescribirlo de otra manera:

int BaseDeDatos::bajaEquipo(string codEquipo, string nombre){
Equipo *aux = new Equipo(codEquipo, nombre);
Equipo *aux2 = lEquipos.buscar(aux);
delete aux;
if(aux2 != 0){
lEquipos.eliminar(aux2);
}else{
cout<< "ERROR. El equipo no existe "<<endl;
}
return 0;
}

he probado a pasarle por parámetro sólo el nombre, o sólo el código y tampoco.

¿Por qué el método lEquipos.estaEquipo() funciona en algunos casos y en otros no?

muchas gracias por adelantado
  #2 (permalink)  
Antiguo 02/09/2009, 05:10
 
Fecha de Ingreso: septiembre-2009
Mensajes: 4
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Proyecto C++ STL

Siento mucho la falta de claridad pero el editor no me ha tenido en cuenta los espacios.
Gracias
  #3 (permalink)  
Antiguo 03/09/2009, 08:08
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Proyecto C++ STL

Mirate el operador == de la clase Equipo.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:20.