Ayuda proyecto C++

achadual
02 de Septiembre del 2009
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:

[U]clase Interfaz.cpp:[/U] 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 << 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;

cout << endl;
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.

achadual
02 de Septiembre del 2009
Siento mucho la falta de claridad pero el editor no me ha tenido en cuenta los espacios.
Gracias

achadual
02 de Septiembre del 2009
Ahi estaba el problema. A veces tanto buscar no veo lo m谩s evidente...

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

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

compara dos objetos de tipo Equipo, y la sobrecarga del m茅todo == es para codigoEquipo, no para el nombre

bool operator== (const Equipo &e1, const Equipo &e2){
return e1.getCodEquipo() == e2.getCodEquipo();
}

驴puedo sobrecargar dos veces el operador " == ", o tendria que llamarlo de otra manera?

GRACIAS