Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

290
Vistas
C: "el tipo de matriz tiene un tipo de elemento incompleto" cuando se usa una matriz de estructura sin typedef

Problema: el siguiente fragmento de código se compila bien (donde ambos tipos de estructura están definidos):

 typedef struct { int a; float b; } member_struct; typedef struct { int a; double b; member_struct c; } outside_struct; outside_struct my_struct_array[4];

Sin embargo, si se descarta el typedef de "outside_struct":

 typedef struct { int a; float b; } member_struct; struct { int a; double b; member_struct c; } outside_struct; struct outside_struct my_struct_array[4];

Recibo el error: "array type has incomplete element type 'struct outside_struct'". Y si también elimino el typedef de "member_struct", obtengo un error adicional: "field 'c' has incomplete type"

Pregunta: ¿Por qué sucede? ¿Es estrictamente necesario usar typedef aquí? En mi código, de lo contrario, nunca uso typedef para tipos de estructura, por lo que estoy buscando una forma de evitar eso, si es posible.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

En esta declaración

 struct { int a; double b; member_struct c; } outside_struct;

se declara el objeto outside_struct de tipo estructura sin nombre. No se declara ninguna estructura con el nombre struct outside_struct .

Entonces el compilador emite un error en esta declaración de una matriz

 struct outside_struct my_struct_array[4];

porque en esta declaración se introduce el especificador de tipo struct outside_struct que no está definido. Es decir, en esta declaración, el especificador de tipo struct outside_struct es un tipo incompleto.

No puede declarar una matriz con un tipo de elemento incompleto.

En lugar de declarar el objeto outside_struct de una estructura sin nombre, debe declarar una estructura con el mismo nombre de etiqueta que

 struct outside_struct { int a; double b; member_struct c; };
over 4 years ago · Santiago Trujillo Denunciar

0

Si suelta el typedef, debe agregar una etiqueta de estructura en su lugar: struct outside_struct { ... };

over 4 years ago · Santiago Trujillo Denunciar

0

Typedef se utiliza para crear un nombre adicional (alias) para otro tipo de datos.

 typedef int myInt; //=>equivalent to "int" myInt index = 0; //=>equivalent to "int index = 0;"

Es la misma lógica para struct.

 typedef struct myStruct {} myStruct_t; //=> equivalent to "struct myStruct {};" myStruct_t myStructVariable; //=> equivalent to "struct myStruct myStructVariable;"

syntaxe = "typedef type newAlias;"

" myStruct{} " es un nuevo tipo que contiene todo el tipo que desea (int, char...)

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda