Bueeno... Pues aquí hay un cacao bastante grande y se pueden mejorar algunas cosas de diseño.
Por un lado llamas a una función "Modificar_cliente" (línea 5) pero por otro lado llamas a una
función miembro / método "Modificar_cliente" (línea 10) que tiene toda la pinta de pertenecer a una clase "Cliente" o algo así. Son 2 funciones totalmente diferentes, a no ser que el trozo de código que has pegado pertenezca a la clase "Cliente" también, en cuyo caso el código tendría un grave problema de estructuración (por lo que daré por hecho que no es el caso).
El segundo trozo de código que muestras, si está declarado fuera de la clase "Cliente", hará referencia a la función llamada en la línea 5 pero si pertenece a un fragmento de la clase, entonces hará referencia a la función llamada en la línea 10.
Voy a darte un ejemplo de cómo quedaría esto mismo con un código un poco más estructurado y haciendo uso de múltiples ficheros (los nombres son opcionales pero tienen que concordar igual que en este ejemplo).
Norma general:
- Fichero .h / .hpp -> Contiene definiciones. Define constantes globales, funciones (tipo de retorno, nombre de la función, parámetros, ...) pero sin implementación (sin contenido en la función)
- Fichero .cpp -> Contiene implementaciones. Implementa las funciones definidas en los ficheros .h o .hpp
Por un lado, como vas a trabajar con una clase Cliente, deberías crear los siguientes ficheros:
// FICHERO Cliente.h
// Aqui definiras la estructura de la clase Cliente, solo la estructura
#ifndef CLIENTE_H
#define CLIENTE_H
class Cliente {
private:
int codigo;
// resto de atributos de la clase y funciones privadas
...
public:
Cliente(int); // El constructor. En la definicion de la clase no es necesario indicar el nombre de los argumentos
int getCodigo();
// Otros metodos publicos de la clase (atributos preferiblemente privados)
void otraFuncionDeEjemplo();
...
}
#endif
// FICHERO Cliente.cpp
// Aqui implementas las funciones definidas en el fichero anterior
#include "Cliente.h" // Incluimos la definicion de la clase porque necesitamos conocerla desde aqui
Cliente::Cliente(int codigo) {
this->codigo = codigo;
}
int Cliente::getCodigo() {
return this->codigo;
}
void Cliente::otraFuncionDeEjemplo(...) {
...
}
Ahora vamos a hacer lo mismo para agrupar todas las utilidades ajenas a la clase. Esto hay muchas maneras de hacerlo: separar las utilidades en varios ficheros, definir todas en el mismo fichero, incluirlas directamente en el main, ...)
// FICHERO Utilidades.h
#ifndef UTILIDADES_H
#define UTILIDADES_H
#include "Cliente.h"
// Esta funcion devolvera el indice del cliente de la lista cuyo codigo sea el mismo que estamos buscando o -1 si no lo encuentra (lo usaremos mas adelante)
int buscarIndiceCliente(Cliente[] listaClientes, int numClientes, int codigo);
#endif
// FICHERO Utilidades.cpp
#include "Utilidades.h"
#include "Cliente.h"
int buscarIndiceCliente(Cliente[] listaClientes, int numClientes, int codigo) {
// PD: El array se tiene que recorrer desde la posicion 0 hasta la posicion numClientes (no incluida)
// En la linea 8 de tu codigo estas recorriendo desde la 1 hasta la posicion numClientes (incluida) y eso generara un error
...
}
Para usar todo esto, tenemos que crear una función main() que contiene el código principal de tu programa. Para ello usamos otro fichero
// FICHERO main.cpp
// Basta con incluir los .h para que este fichero "conozca" la clase Cliente y las funciones (no necesita conocer la implementacion de sus funciones del .cpp)
#include "Cliente.h"
#include "Utilidades.h"
// ESTE FRAGMENTO se podria incluir aqui o en un fichero main.h e incluirlo al principio de este
const MAX_CLIENTES = 10;
// Prototipos de funciones que vayamos a usar en el main() -> La implementacion de dichas funciones iria en este mismo fichero -> En este caso usaremos Utilidades.h
// FIN FRAGMENTO
int main() {
Cliente listaClientes[MAX_CLIENTES];
int numClientes = 0; // Este contador lleva el numero real de clientes en la lista
...
// Ahora llegamos a tu parte:
case 'b': case 'B': // No necesitas la llave. Ademas puedes convertir la variable a mayuscula/minuscula para no hacer ambas comprobaciones
cout << "Introduce codigo: ";
cin >> codigo;
int indiceCliente = buscarIndiceCliente(listaClientes, numClientes, codigo);
if(indiceCliente != -1) {
// Aqui ya puedes recuperar el cliente buscado a una variable para trabajar con el
Cliente c = listaClientes[indiceCliente];
// O trabajar con el directamente sin usar otra variable
listaClientes[indiceCliente].otraFuncionDeEjemplo(); // Incluyendo los mismos argumentos que hayas indicado al definir la funcion
} else {
// Si entras aqui es porque el codigo no se ha encontrado
cout << "El codigo no existe..." << endl;
}
// El uso que le das a getch() es para pausar el programa hasta que pulses una tecla y entonces limpiar la pantalla
// getch() pertenece a <conio.h> y no es estandar. En C++ la opcion recomendable es: cin.get() (y es mejor que no asignes el resultado a ninguna variable para evitar posibles errores futuros)
cin.get();
system("cls");
break;
....
}
Código mejor estructurado y con un poco de todo para que te sirva de ayuda.
PD: Deberías pensar bien cómo quieres modificar un cliente y dónde deberías meter esa funcionalidad...