erreur de référence externe g ++
-
05-07-2019 - |
Question
J'ai un problème qui est reproduit sur g ++. VC ++ ne rencontre aucun problème. J'ai donc 2 fichiers cpp:
1.cpp:
#include <string>
#include <iostream>
extern const std::string QWERTY;
int main()
{
std::cout << QWERTY.c_str() << std::endl;
}
2.cpp:
#include <string>
const std::string QWERTY("qwerty");
Pas de magie, je veux juste placer les constantes de chaîne dans un fichier séparé. Au moment du lien, ld génère une erreur: "référence non définie à` _QWERTY '' " Les premiers pensent emballer les deux déclarations dans "extern" et "C". - n'a pas aidé. Erreur et non c ++ _QWERTY est toujours là.
Merci d'avance pour vos suggestions
La solution
Il semble que vous rencontriez probablement ce bit de la norme:
En C, objet qualifié du fichier dans le fichier const portée sans stockage explicite le spécificateur de classe a un lien externe. En C ++, il existe une liaison interne.
Modifiez ce changement en 2.cpp:
#include <string>
extern const std::string QWERTY("qwerty");
Vous trouverez plus de détails sur ce que "lien". signifie dans cette question - Qu'est-ce qu'un lien externe et un lien interne en C ++? .
Autres conseils
Je devrais le rechercher, mais je pense que les variables globales const ont un lien interne en C ++, n'utilisez pas const
et la compilation se déroulera sans problème.
1.cpp
...
extern std::string QWERTY;
...
2.cpp
#include <string>
std::string QWERTY("qwerty");
Ou vous pouvez le déclarer / le définir comme une chaîne const dans un en-tête commun bien sûr.
L'ajout d'un extern
superflu au fichier 2.cpp le compilera également, mais je ne suis pas sûr que ce soit standard ou un g ++ 'extra'