Question

J'ai un ensemble de variables globales et une méthode dans un fichier cpp.

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 que lorsque j'inclus le fichier d'en-tête dans un autre fichier C++, je ne peux pas utiliser les variables externes et la méthode.Cela donne une erreur de l'éditeur de liens disant erreur LNK2001 :symbole externe non résolu pour les méthodes et les 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!

Était-ce utile?

La solution

Essaye ça

Définissez ces variables dans votre en-tête au lieu de simplement les déclarer.

extern int x; est juste une déclaration (pas 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();
}

Autres conseils

Vous devez inclure le .cpp fichier qui définit ceux extern variables et la fonction déclarée dans votre en-tête dans le jeu de compilation.Si la .cpp Le fichier 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 de l'éditeur de liens.

Êtes-vous sûr que vous connaissez dans le fichier d'objet correspondant au fichier source contenant vos méthodes et variables?

puisque vous utilisez Visual-C ++ (selon la balise), je vous assurerais simplement que tous vos fichiers sont dans le même projet lors de la compilation.Assurez-vous de créer un projet et non seulement de construire un fichier.

Je doute que c'est le cas, mais vous pouvez également vouloir vérifier que les fichiers source sont soit compilés comme C ou C ++, ou vous pouvez avoir des problèmes avec le schéma de dénomination.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top