Tengo un vecor donde se guardan los diferentes datos de los clientes:
struct cliente{
int identificador;
string c;
string nombre;
string direccion;
string correo;
string ciudad;
};
const int MAXClientes = 1000;
typedef cliente VecClientes [MAXClientes];
Y una función donde llena los datos desde el archivo clientes
void FncLeerClientesFich(ifstream &f, VecClientes v, int &tam){
string id;
v.clear();
tam=0;
while (!f.eof()){
getline (f,id);
v[tam].identificador = atoi(id.c_str());
getline (f,v[tam].c);
getline (f,v[tam].nombre);
getline (f,v[tam].direccion);
getline (f,v[tam].correo);
getline (f,v[tam].ciudad);
tam++;
}
}
El problema que me da error en la función clear me sale: [Error] request for member 'clear' in 'v', which is of pointer type 'cliente*' (maybe you meant to use '->' ?)
Como seria para eliminar el vector?
Cita de: chihue en 7 Enero 2015, 16:57 PMTengo un vecor
No es un vector, es un array, ahí empieza el problema.
Cita de: chihue en 7 Enero 2015, 16:57 PMEl problema que me da error en la función clear me sale: [Error] request for member 'clear' in 'v', which is of pointer type 'cliente*' (maybe you meant to use '->' ?)
Ese mensaje se genera porque cuando utilizas el nombre de un array como argumento de una función esta recibe la dirección en memoria de (un puntero a) su primer elemento. Antes de utilizar el mentado puntero debes aplicar indireccion, a eso se refiere la parte del mensaje "maybe you meant to use '->' ?". Pero aun cuando se aplicara indireccion no se resolverá el problema de fondo: estas tratando de utilizar un array como un objeto de la clase vector (llamando a su función miembro clear (http://www.cplusplus.com/reference/vector/vector/clear/)) y eso no es posible.
Cita de: chihue en 7 Enero 2015, 16:57 PMComo seria para eliminar el vector?
Las operaciones sobre tu array deben realizarse de forma manual, en el caso de tu función basta con colocar el contador de numero de elementos (el parámetro por referencia "tam") a cero y eso ya esta implementado.
Si quieres utilizar un vector en lugar de un array una referencia en linea cortesía del sitio C Plus Plus es std::vector (http://www.cplusplus.com/reference/vector/vector/).
Un saludo
Como haria entonces para vaciar ese array?
La pregunta sería que harás con ese array tras la función, porque no se pasa por referencia (a menos que me haya liado yo) y seguirá exactamente como estaba tras pasar por la función.
La función tal y como está no devuelve nada, ¿o me he perdido algo?
Cita de: chihue en 7 Enero 2015, 19:01 PMComo haria entonces para vaciar ese array?
Los arrays no se vacían, en su lugar utilizas una variable para tomar nota del numero de elementos utilizados y eso ya lo haces en tu función con la variable "tam".
----
Cita de: Orubatosu en 7 Enero 2015, 20:45 PMLa función tal y como está no devuelve nada, ¿o me he perdido algo?
Ya que los elementos del array se modifican mediante indireccion con el operador "[]" y el numero de estos se indica mediante el parámetro por referencia "tam" no hay necesidad de retornar algo.
Un saludo
Yo primeramente me preguntaria de donde se saco la funcion "v.clear();"
acaso no es un simple arreglo de struct
asi que como jodidos saco un metodo no es una clase u objeto
ha por ultimo los arreglos estaticos no se puden eliminar porque se crean en tiempo de compilacion y no de ejecucion como si seria el caso de arreglos dinamicos