2011-07-15 5 views
0

Mon fichier source commence par:Impossible fonctions utilisées définies dans le fichier d'en-tête

#include "foo.h" 

Je suis en mesure d'utiliser toutes mes variables globales, les types et struct de mon dossier d'en-tête. Dans mon fichier d'en-tête, j'ai commencé avec deux comprend:

#include<file.h> 

Passez ensuite aux variables globales:

#define GLOBAL 

Puis struct:

#typedef struct boo; 

Ensuite types. Ensuite, je vais aux déclarations de fonction. I.e.:

size_t foo(int*r, size_t nitems); 

Qu'est-ce que je fais mal que je reçois des erreurs de l'éditeur de liens>

+0

Je ne peux m'empêcher de me demander à quoi sert le #define GLOBAL? –

+0

et quelle erreur obtenez-vous? – triclosan

+0

Le #define global est juste une définition globale de varibale, j'ai écrit: #define Global 5 Mais je reçois un LNK2001 – Matt

Répondre

1

sans doute est le problème dans la façon dont vous liez.

1

Le fichier d'en-tête fournit la déclaration de fonction à votre code source. Comme vous l'avez constaté, cela suffit pour compiler votre code, mais pas pour le lier.

Pour l'obtenir, vous devez fournir à l'éditeur de liens un fichier contenant la fonction compilée actuelle - la déclaration de la fonction est en fait une promesse faite au compilateur de le faire.

Exactement comment vous le faites dépend de ce que les outils que vous utilisez et quelle forme la fonction compilée est dans.

0

#define pour les identifiants de substitution simples fonctionne exactement comme un copier/coller.

Une fois que vous faites

#define GLOBAL 5 

le code suivant

int GLOBAL; 
GLOBAL = 13; 
putchar(GLOBAL); 

se transforme à

int 5; 
5 = 13; 
putchar(5); 

qui évidemment ne compile pas.

Questions connexes