declarando una estructura en el archivo .h e implementando en el archivo .c

este es mi archivo .h:

struct _MyString; typedef struct _MyString MyString; 

Me gustaría declarar sus miembros en el archivo .c

Lo intenté:

 typedef struct MyString{ char * _str;// pointer to the matrix unsigned long _strLength; }MyString; 

pero no funciona ¿Cómo declaro los miembros de la estructura en el archivo .c?

gracias

Sólo necesitas 1 typedef. Mantenga el que ya tiene en el archivo .h y elimine todos los demás.

Ahora, el nombre de la estructura es struct _MyString . Eso es lo que debe definir en el archivo .c, no en la struct MyString : observe la ausencia de ‘_’.

Asi que

archivo .h

 struct _MyString; typedef struct _MyString MyString; 

archivo .c

 #include "file.h" struct _MyString { char * _str;// pointer to the matrix unsigned long _strLength; }; 

¿Qué es exactamente lo que no funciona? Si está intentando acceder a esta estructura desde otro archivo .c , no funcionará. La statement de la estructura completa debe estar visible para todos los archivos de origen que la usan, por lo general, esto se hace declarándola en un archivo de encabezado y #include en los archivos de origen.

Quizás esté confundiendo esto con cómo las funciones se declaran en un archivo de encabezado y se definen en un archivo de origen; la statement aún debe estar visible para todos los archivos de origen.

Si necesita usar una estructura en un archivo .c, necesita la definición completa de la estructura cuando se comstack. Esto se hace a menudo mediante #incluyendo un archivo de encabezado con la definición.

Si no necesita compartir la definición de la estructura, puede colocarla dentro de un archivo .c, pero solo será visible para las funciones dentro de ese archivo.

Parece que estás intentando tener una interfaz para tu estructura y solo definirla en un archivo .c para evitar que otras partes de tu código accedan a la estructura. Puedes hacerlo solo a través de un puntero. Así por ejemplo:

 typedef struct MyString* MyString; 

Y en el archivo .c puedes definirlo. Puedes definir funciones usando el typedef MyString en su lugar.

Por favor, tenga claro lo que no funciona para obtener una solución correcta. Lo que creo que podría ser el problema es que necesita incluir el archivo .h en el archivo .c donde se define la estructura. También incluya .h en todos los archivos .c que necesiten esta estructura. Asegúrate de que estás fuera de esta estructura en ese caso.