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