2010-11-09 6 views
4

ceci est mon fichier .h:déclarant un struct dans le fichier .h et la mise en œuvre dans le fichier .c

struct _MyString; 
typedef struct _MyString MyString; 

je voudrais déclarer ses membres dans le fichier .c.

i essayé:

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

mais il ne fonctionne pas. comment puis-je déclarer les membres de la structure dans le fichier .c?

merci

+2

Qu'est-ce qui n'a pas fonctionné? Donner des messages d'erreur/symptômes spécifiques. –

+0

Je ne peux pas tester cela maintenant, mais je suppose que c'est parce que vous avez déclaré _MyString à MyString mais que vous avez défini une structure nommée MyString. Vous voulez probablement définir _MyString sans typedef dans votre fichier .c. – asm

Répondre

9

Vous n'avez besoin que d'un seul typedef. Conservez celui que vous avez déjà dans le fichier .h et supprimez tous les autres.

Maintenant, le nom de la structure est struct _MyString. C'est ce que vous devez définir dans le fichier .c, pas struct MyString: notez l'absence du '_'.

Alors

.h

struct _MyString; 
typedef struct _MyString MyString; 

fichier .c

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

Qu'est-ce qui ne fonctionne pas exactement? Si vous essayez d'accéder à cette structure à partir d'un autre fichier .c, cela ne fonctionnera pas. La structure entière déclaration doit être visible pour tous les fichiers source qui l'utilisent - typiquement ceci est fait en le déclarant dans un fichier d'en-tête et #include-le dans les fichiers source.

Peut-être que vous confondez cela avec la façon dont les fonctions sont déclarées dans un fichier d'en-tête et défini dans un fichier source - la déclaration doit encore être visible pour tous les fichiers source.

0

Si vous avez besoin d'utiliser un struct dans un fichier .c il a besoin de la définition complète de la struct lors de la compilation. Ceci est souvent fait en #incluant un fichier d'en-tête avec la définition.

Si vous n'avez pas besoin de partager la définition de structure, vous pouvez la placer dans un fichier .c, mais elle ne sera visible que par les fonctions de ce fichier.

Il semble que vous essayiez d'avoir une interface avec votre structure et que vous la définissiez uniquement dans un fichier .c pour empêcher d'autres parties de votre code d'accéder à la structure. Vous pouvez le faire mais seulement via un pointeur. Par exemple:

typedef struct MyString* MyString; 

Et dans le fichier .c vous pouvez le définir. Vous pouvez définir des fonctions en utilisant le typedef MyString à la place.

0

Veuillez être clair sur ce qui ne fonctionne pas pour obtenir une solution correcte. ce qui est mon estimation pourrait être le problème est que vous devez inclure le fichier. H dans le fichier. C où vous définissez la structure. Incluez également .h dans tous les fichiers .c qui ont besoin de cette struture. Assurez-vous d'externaliser cette structure dans ce cas.

Questions connexes