Comment utiliser une liste chaînée avec un fichier d’en-tête en C?

Je dois créer un programme qui exécute diverses fonctions avec une liste chaînée. Je dois enregistrer les fonctions dans un fichier séparé de main (), mais je ne peux pas comprendre comment inclure la liste dans le fichier d’en-tête. J’ai essayé différentes combinaisons et j’ai maintenant ceci dans le fichier linkedList.h:

typedef struct list_elements* item; 

Et cela dans le linkedList.c

 typedef struct list_elements{ int value; struct list_elements *next; }item 

Le problème est que lorsque j’essaie de comstackr le fichier main.c, je reçois le message suivant: “demande de membre” valeur dans quelque chose qui n’est pas une structure ou union “et” demande de membre “suivant” dans quelque chose qui n’est pas une structure ou union “.

J’ai consulté les manuels suggérés et en ligne, mais je ne trouve pas d’explication sur l’utilisation des listes chaînées avec des fichiers d’en-tête?

(Les fonctions fonctionnent lorsque j’ai testé le tout dans un seul fichier, donc je ne pense pas que ce soit le problème);

Vous essayez de saisir deux fois le même identifiant avec différents types.

Supprimez le premier typedef struct list_elements* item; typedef typedef struct list_elements* item; et placez le second dans l’en-tête linkedList.h, qui doit être inclus dans linkedList.c.

La déclaration de votre en-tête définit le type item tant que pointeur sur un struct list_elements . La déclaration de linkedList.c déclare le même nom, item , en tant struct list_elements pour le type struct list_elements lui-même. Bien que cela ne soit pas fondamentalement faux, il est certain que cela prête à confusion. Cela empêche le fichier linkedList.c de linkedList.c le fichier d’en-tête, ce qui est normalement approprié.

Vous devez faire toutes vos déclarations de type dans le fichier d’en-tête et l’inclure dans les deux fichiers source C pour vous assurer qu’ils partagent ces déclarations. Les déclarations de type incluent au moins les déclarations typedef s, struct et union et les prototypes de fonction. Ce n’est pas une liste exclusive de choses que vous pourriez vouloir mettre dans un en-tête.

Il y a plus d’une façon de faire ça:

L’un d’eux consiste à définir les structures avec le prototype des fonctions que vous voulez utiliser dans un fichier .h et le code des fonctions dans un fichier .c séparé (avec les mêmes prototypes écrits dans le fichier .h bien sûr), puis vous êtes maintenant prêt à utiliser la structure dans tout autre fichier .c en incluant votre fichier d’en-tête. par exemple:

StType.h

 typedef struct Something{ int a; int b; } typedef struct anotherSomething{ int c; int d; } int fct1(); int fct2(); 

Fct.c

 include StType.h; int fct1() { //... } void fct2() { //... } 

votre programme.c

 include StType.h int main() { Something s; fct1(); } 

Je fais habituellement quelque chose comme ça.