undefined reference lors de l'utilisation extern
J'ai la configuration suivante (j'espère que ce n'est pas trop nu un exemple):
A. h
typedef std::map<unsigned int, float> MyClass;
extern MyClass inst;
A.cpp
MyClass inst;
B. h
#include <A.h>
void foo();
B.cpp
#include <B.h>
void foo {
inst.myClassFunc();
}
Maintenant, lorsque j'utilise inst dans B.cpp
- je obtenir undefined reference to inst
.
Aucune idée sur comment résoudre ce problème?
Avez-vous #inclure la définition de la
Vous devez inclure le compilateur message d'erreur dans votre post.
class MyClass
dans B.cpp?Vous devez inclure le compilateur message d'erreur dans votre post.
OriginalL'auteur Amir Rachum | 2010-09-07
Vous devez vous connecter pour publier un commentaire.
Je sais que cette question est ancienne, mais elle pourrait quand même être utile pour quelqu'un.
La variable globale (ici:
MyClass inst
) ne doit pas êtreextern
pour l'unité de compilation qui définissent (ici:A.cpp
)Un moyen d'y parvenir:
global.h
) et d'inclure cet en-tête dans le *rpc à l'aide de ces.extern
mot-clé pour l'unité de compilation qui définir (p. ex. avec#ifdef
) :mondiale.h ressemble:
tandis que A. h ressemble:
et A.cpp:
Espère que cela aide!
OriginalL'auteur johan d.
C'est trop nu un exemple de travail sur l'. Toutefois, en se fondant sur ce qui précède, il est tout à fait possible que quand il frappe le défaut de ligne le compilateur n'a pas connaissance de ce qui est fait dans
MyClass
et, par conséquent, ne peut pas résoudreMyClassFunc
.Nous aurions besoin de voir la définition de MyClass et de savoir où il en est pour la réponse.
MyClass
OriginalL'auteur Steve Townsend
Vous devez compiler le fichier mentionné ci-dessus A.cpp comme
et puis, tandis que la création de l'exécutable, vous devez écrire la commande comme suit:
g++ A.cpp B.cpp
.OriginalL'auteur mukeshkumar
À partir de l'exemple de base de code que vous avez posté, je dirais que vous avez oublié de
#include <B.h>
dans votre B.cpp fichier.OriginalL'auteur Martin Ba