consulta sobre Struct Array[] en C++

Iniciado por xkiz ™, 29 Junio 2011, 04:32 AM

0 Miembros y 1 Visitante están viendo este tema.

xkiz ™

estoy haciendo algo en VC++ para lo cual creo que me facilitaria un poko utilizar struct para ordenar los datos que posteriormente utilizaria para cargar en un ListView o hacer alguna busqueda X, pero como recien estoy empezando a programar en (VC++ 6.0) no se bien como hacer un Struct array[] sin valor de Array. de seguro que no sera asi o habra alguna forma de hacerlo, pero lo googlie y todos los ej. que encontre el Array tenia un valor asignado y yo en mi caso no se cual va a ser el valor del Array. expongo un ej

Código (cpp) [Seleccionar]

#include <windows.h>
#include <stdio.h>

struct people{
LPCTSTR name;
LPCTSTR LastName;
};
char temp[50];
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
people Persons[];
// people * Persons; // <------- CRASH
Persons[0].name = "Aaron";
Persons[0].LastName = "xkiz";

Persons[1].name = "John";
Persons[1].LastName = "Doe";

Persons[2].name = "John";
Persons[2].LastName = "Johnson";

for(int x=0; x<sizeof(Persons);x++){
sprintf(temp, "Person # %i: %s %s",x, Persons[x].name, Persons[x].LastName);
OutputDebugString((LPCTSTR)temp);
}
return 0;
}


lo cual devuelve el error:

Citar
....cpp(13) : error C2133: 'Persons' : unknown size
....cpp(23) : error C2070: illegal sizeof operand

y la verdad no se como resolver eso, es posible hacer un array struct [] ???

leogtz

Necesitas un arreglo dinámico de estructuras. Algo como esto:

#include <stdio.h>
#include <stdlib.h>

struct people
{
    /* Tú cambias los campos, solo es un ejemplo */
    int x;
    int y;
};

int main(void)
{
    unsigned n;
    printf("Número de personas : ");
    fflush(stdout);
    scanf("%u", &n);

    struct people *personas = malloc(sizeof(struct people) * n);

    unsigned i;

    for(i = 0; i < n; i++)
    {
        printf("personas[%u].x = ", i);
        scanf("%d", &personas[i].x);
        printf("personas[%u].y = ", i);
        scanf("%d", &personas[i].y);
    }

    free(personas);

    return 0;
}


Acomoda los campos a tu conveniencia, nota que hay que liberar la memoria ocupada con free().
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

xkiz ™

#2
gracias por responder.
me surgio un problema con ese code, me tira error:

Código (cpp) [Seleccionar]

struct people *personas = malloc(sizeof(struct people) * n);
//error C2440: 'initializing' : cannot convert from 'void *' to 'struct people *' Conversion from 'void*' to pointer to non-'void' requires an explicit cast


otra cosa, yo arrme ese ej para no poner el choclaso de code en lo que estoy trabajando y hacerlo mas simple, pero la onda es que, no puedo asignar un valor al vector, el valor se incrementa dentro en un for.
si no tendria que hacer 2 for(), uno para obtener el valor del vector [n], y el 2º para asinar el valor al personas [n].y.


leogtz

#include <stdio.h>
#include <stdlib.h>

struct people
{
    /* Tú cambias los campos, solo es un ejemplo */
    int x;
    int y;
};

int main(void)
{
    unsigned n;
    printf("Número de personas : ");
    fflush(stdout);
    scanf("%u", &n);

    struct people *personas = (struct people *)malloc(sizeof(struct people) * n);

    unsigned i;

    for(i = 0; i < n; i++)
    {
        printf("personas[%u].x = ", i);
        scanf("%d", &personas[i].x);
        printf("personas[%u].y = ", i);
        scanf("%d", &personas[i].y);
    }

    free(personas);

    return 0;
}
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

xkiz ™

uh disculpa, me olvide de darte las gracias.....