Frage

Ich habe Problem, das auf g wiedergegeben wird ++. VC ++ erfüllt nicht alle Probleme. Also ich habe 2 CPP-Dateien:

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");

Keine Magie, ich möchte nur Platz String-Konstanten in getrennte Datei. Zur Verknüpfungszeit ld erzeugt einen Fehler: "undefined reference to` _QWERTY '" Die erste denken beide Erklärungen in „extern‚C‘“ einzuwickeln - nicht helfen. Fehler und nicht c ++ _QWERTY ist immer noch da.

Vielen Dank im Voraus für alle Anregungen

War es hilfreich?

Lösung

Es sieht aus wie Sie wahrscheinlich in diesem Bit des Standards ausgeführt werden:

  

In C, ein const qualifizierten Objekt in Datei   Umfang ohne eine explizite Speicherung   Klasse Spezifizierer externe Bindung.    In C ++, es hat interne Bindung.

Nehmen Sie diese Änderung zu 2.cpp:

#include <string>
extern const std::string QWERTY("qwerty");

Es gibt einige weitere Einzelheiten über was „Verknüpfung“ versteht man in dieser Frage - Was ist eine externe Bindung und interne Bindung in C ++ .

Andere Tipps

Ich muss es so aussehen, aber ich denke, const globale Variablen interne Bindung in C ++ haben, verwenden Sie nicht const und es wird kompilieren in Ordnung.

1.cpp

...
extern std::string QWERTY;
...

2.cpp
#include <string>
std::string QWERTY("qwerty");

Oder Sie könnten erklären / definiert es als const String in einem gemeinsamen Header natürlich.

eine überflüssige extern zum 2.cpp Hinzufügen wird es zu kompilieren, aber ich bin mir nicht sicher, ob das Standard oder einig g ++ ‚Extra‘

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top