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

Était-ce utile?

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'

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