Eliminar todos los elementos de un vector

Iniciado por chihue, 7 Enero 2015, 16:57 PM

0 Miembros y 2 Visitantes están viendo este tema.

chihue

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?

rir3760

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) 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.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

chihue

Como haria entonces para vaciar ese array?

Orubatosu

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?
"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998

rir3760

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

crack81

#5
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
Si C/C++ es el padre de los lenguajes entonces ASM es dios.