Título: Asignar valores a un vector Publicado por: el_doctor en 3 Septiembre 2013, 18:46 pm Saludos quiero probar si un vector me devuelve bien los datos antes de programar los datos que va recibir el constructor tengo un contructor en una biblioteca que he creado llamada NetXh.h y la forma del constructor es:
struct NetxInfo { public: ULONG pid; WCHAR filename[MAX_PATH]; WCHAR pathname[MAX_PATH]; WCHAR protocol[10]; WCHAR state [MAX_PATH]; WCHAR srcip[MAX_PATH]; WCHAR destip[MAX_PATH]; }; ahora bien donde incluyo el archivo Netxh.h creo un vector: vector<NetxInfo>* initialNetxes = new vector<NetxInfo>(); quiero agregarle valores (basura) sólo para probar si la función que me va devolver este vector funciona bien. como puedo agregarle valores de forma estática no se si lo puedo hacer de la forma: initialNetxes[0].pid = <dato>; initialNetxes[0].filename = <dato>; . . . initialNetex[0].destip = <dato>; para todo el vector que contiene la estructura NetxInfo Título: Re: Asignar valores a un vector Publicado por: eferion en 4 Septiembre 2013, 08:49 am Antes de nada: El código enciérralo con las etiquetas GeSHi, así quedará más claro. es el combobox que está en la ventana de escritura de mensajes encima del combo que dice "Cambiar Color". Elige el lenguaje correspondiente, en tu caso c++.
Saludos quiero probar si un vector me devuelve bien los datos antes de programar los datos que va recibir el constructor tengo un contructor en una biblioteca que he creado llamada NetXh.h y la forma del constructor es: struct NetxInfo { public: ULONG pid; WCHAR filename[MAX_PATH]; WCHAR pathname[MAX_PATH]; WCHAR protocol[10]; WCHAR state [MAX_PATH]; WCHAR srcip[MAX_PATH]; WCHAR destip[MAX_PATH]; }; Una aclaración: Lo que has puesto no es ningún constructor, tu ahí has definido una estructura. Un constructor es una función que crea e inicializa una estructura como la que tú has puesto. En el caso de c++ el constructor tiene esta forma: Código
La implementación es libre, pero con lo que tienes lo más lógico es que fuese algo así: Código
Como norma general, en c++ se usa la palabra clave "class" para definir clases nuevas. La diferencia entre "class" y "struct" en c++ es que por defecto en "class" los miembros son privados, mientras que en "struct" son públicos. En cualquier caso lo lógico y normal, como te he comentado, es usar "class". Además, no se hasta qué punto es lógico que uses arrays de caracteres al estilo de C cuando en C++ tienes la clase string para gestionar cadenas de caracteres: Código
Si en algún momento necesitas recuperar la cadena siguiendo la codificación de C, puedes usar el método c_str de la clase string: Código
Por defecto, en C++ no suele ser necesario la mayoría de las veces gestionar la memoria de forma dinámica ( muchas veces se hace más por inercia que por necesidad ). En tu caso no veo sentido a que el vector lo declares como un puntero: Código
La ventaja de definirlo de forma estática es que no tienes que preocuparte por la liberación de recursos. Además, si luego este vector lo vas a manejar en diferentes funciones no es necesario que pases "copias" del mismo, sino que lo puedes pasar por referencia: Código
La ventaja de usar en la medida de lo posible objetos no dinámicos es que la gestión de la memoria puede llegar a ser algo realmente problemático y, con frecuencia, se suelen generar lagunas de memoria como consecuencia de despistes. Para rellenar el vector puedes hacer algo como esto Código
Consideración final: No escribas código en los archivos de cabecera (.h), el código SIEMPRE debe ir en los cpp. Acostúmbrate a ser ordenado con tu código o luego lo vas a pasar realmente mal para corregir tus propios errores. |