2010-07-15 33 views
4

J'ai un ensemble de variables globales et une méthode dans un fichier cpp.Problème avec 'extern' Mot clé

int a; 

int b; 

int c; 

void DoStuff() 
{ 

} 

dans le fichier d'en-tête Je les ai déclarés explicitement avec le mot-clé extern. Mon problème est lorsque j'inclure le fichier d'en-tête dans un autre fichier C++, je ne peux pas utiliser les variables externes et la méthode. Il donne une erreur de lien en disant erreur LNK2001: symbole externe non résolu pour les méthodes et variables. Qu'ai-je fait de mal ici?

PS: la méthode DoStuff() remplit les variables. Tous les fichiers d'en-tête et les fichiers cpp se trouvent dans le même dossier de projet.

Merci!

Répondre

2

Essayez cette

Définir ces variables dans votre tête au lieu de les déclarer.

extern int x; est juste une déclaration (non une définition)

Exemple simple

a.cpp

int a,b,c; //definition 

void doStuff(){ 

} 

b.cpp

extern int a,b,c; //extern keyword is mandatory 
void doStuff(); //extern keyword is optional because functions by default have external linkage 

int main() 
{ 

    doStuff(); 
} 
1

Vous devez inclure le fichier .cpp qui définit les variables extern et la fonction déclarée dans votre en-tête dans le jeu de compilation. Si le fichier .cpp contenant les définitions n'est pas compilé et lié à celui qui utilise les déclarations de votre fichier d'en-tête, vous obtiendrez des erreurs d'éditeur de liens.

0

Etes-vous sûr que vous liez dans l'objet fichier qui correspond au fichier source contenant vos méthodes et variables?

+0

Oui, je l'ai vérifié. – Izza

0

Puisque vous utilisez Visual-C++ (selon la balise), je m'assurerais simplement que tous vos fichiers sont dans le même projet lors de la compilation. Assurez-vous que vous construisez un projet et pas seulement un fichier. Je doute que ce soit le cas, mais vous voudrez peut-être aussi vérifier que les fichiers sources sont compilés en C ou en C++, ou vous pourriez avoir des problèmes avec le schéma de nommage.