Comment utiliser plusieurs sources et les fichiers d'en-tête

J'ai récemment appris comment peut-on utiliser plusieurs fichiers source avec les fichiers d'en-tête afin de rendre le code portable et hiérarchique. Pour ce faire, j'ai essayé de créer mon programme d'arbre à l'aide de ce principe. Voici mes fichiers

b_tree_ds.h - il contient un déclaration de discbased de nœud d'un arbre, qui peut être appelé de différentes fonctions de la mise en œuvre de la fonctionnalité de l'arbre (qui peut être dans différents fichiers source)

typedef struct node {
    struct node* left;
    struct node* right;
    int key;    //contains value
}NODE;

Lorsque j'essaie d'ajouter un extern comme dans typedef extern struct node il donne une erreur de plusieurs de stockage de classe, mais si je le rate, je reçois l'erreur pour de multiples définitions.

Voici mes autres fichiers source

traverse.h - contient la déclaration de la traversée de la fonction

void traverse_print (NODE* p);

Ici aussi, j'obtiens l'erreur inconnue identificateur de NŒUD

traverse.c - contient la définition de la fonction d'

#include <stdio.h>
#include "b_tree_ds.h"
#include "traverse.h"

void traverse_print(NODE* p)
{
    if(p->left != NULL)
    {
        traverse_print(p->left);
    }

    if (p->right != NULL)
    {
        traverse_print(p->right);
    }

    printf ("\n%d",p->key);
}

Enfin principales.c

#include <stdio.h>
#include "traverse.h"

void main()
{
    //input
    NODE p;

    printf("\nInput the tree");
    input_tree (&p);

    printf("\n\nThe tree is traversing ...\n")
    traverse_print(&p);
}

void input_tree (NODE *p)
{
    int in;
    int c;
    NODE *temp;

    printf("\n Enter the key value for p: ");
    scanf("%d", &in);
    p->key  =in;
    printf ("\n\nIn relation to node with value %d",in);
    printf ("Does it have left child (Y/N): ")
    if ((c = getchar()) == Y);
    {
        //assign new memory to it.
        temp = (NODE *)malloc(sizeof(NODE));
        input_tree(temp);
    }
    printf ("\n\nIn relation to node with value %d",p->key);

    printf ("\nDoes it have right child (Y/N): ")
    if ((c = getchar()) == Y);
    {
        //assign new memory to it.
        temp = (NODE *)malloc(sizeof(NODE));
        input_tree(temp);
    }
}

C'est ma première tentative d'une telle pratique, s'il vous plaît suggérer est la structure de mon programme est bon ou dois-je essayer autre chose.

S'il vous plaît créer un minimum de cas de test, plutôt que de l'affichage de l'ensemble de votre code.
Vous avez posté beaucoup trop hors de propos de code et pas assez du code qui compte. Le problème réside probablement dans votre fichier d'en-tête qui définit la structure. Aussi s'il vous plaît commencer à accepter le fait que void main() n'est pas droit et que vous devez vous dire int main().

OriginalL'auteur simar | 2012-03-17