Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: chihue en 7 Enero 2015, 16:57 pm



Título: Eliminar todos los elementos de un vector
Publicado por: chihue en 7 Enero 2015, 16:57 pm
Tengo un vecor donde se guardan los diferentes datos de los clientes:
Código:
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
Código:
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?


Título: Re: Eliminar todos los elementos de un vector
Publicado por: rir3760 en 7 Enero 2015, 17:32 pm
Tengo un vecor
No es un vector, es un array, ahí empieza el problema.

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

Como 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


Título: Re: Eliminar todos los elementos de un vector
Publicado por: chihue en 7 Enero 2015, 19:01 pm
Como haria entonces para vaciar ese array?


Título: Re: Eliminar todos los elementos de un vector
Publicado por: Orubatosu en 7 Enero 2015, 20:45 pm
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?


Título: Re: Eliminar todos los elementos de un vector
Publicado por: rir3760 en 8 Enero 2015, 02:49 am
Como 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".

----

La 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


Título: Re: Eliminar todos los elementos de un vector
Publicado por: crack81 en 8 Enero 2015, 05:57 am
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