2013-05-02 9 views
6

Ich möchte einige Vektorvariablen (V1 und V2) zwischen zwei cpp-Dateien (A.cpp und B.cpp) freigeben (globalisieren). Ich habe bereits V1 und V2 in A.h durch die folgenden Befehle definiert.Gemeinsam genutzte Vektorvariablen unter mehreren C++ - Dateien

extern vector<uint64_t> V1; 
extern vector<uint64_t> V2; 

Ich habe auch #include "A.h" zu A.cpp und B.CPP-Dateien hinzugefügt. Kann mir jemand mitteilen, was ich noch tun sollte, um auf die Elemente von V1 und V2 in diesen beiden CPP-Dateien zugreifen zu können?

Vielen Dank im Voraus

Antwort

7

Zuerst müssen Sie Ort abholen, wo Ihre Vektoren definiert werden soll. Nehmen wir an, Sie wählen A.cpp.

In A.cpp (nur in einer Datei - Definieren elbe Objekt in mehrere Dateien werden mehrere definierte Symbole Fehler Ausbeute) definieren Vektoren als globale Variablen:

vector<uint64_t> V1; 
vector<uint64_t> V2; 

In B.cpp (und in allen anderen Dateien, aus denen Sie möchten auf V1 und V2 zugreifen) deklarieren Vektoren wie extern. Dies wird Linker sagen an anderer Stelle für die eigentlichen Objekte suchen:

extern vector<uint64_t> V1; 
extern vector<uint64_t> V2; 

Jetzt, in dem Verknüpfungsschritt V1 und V2 von B.cpp wird die V1 und V2 von A.cpp verbunden werden (oder wo auch immer diese Objekte sind definiert) .

+2

Besser, legen Sie die Deklaration in eine Kopfzeile, die in * alle * Kompilierungseinheiten enthalten ist, einschließlich der, die die Definitionen enthält. Auf diese Weise kann der Compiler überprüfen, ob die Definition und die Deklarationen übereinstimmen. –

2

extern bedeutet, dass dies nur die Variablen deklariert, sie nicht definiert. Sie benötigen genau eine DEFINITION dieser Variablen irgendwo in einer Quelldatei (nicht Header). Die DEFINITION sieht genauso aus wie die DEKLARATION ohne die extern

2

Sie haben eine Deklaration in Ihrer Header-Datei erstellt; Jetzt müssen Sie die Definition in einer einzelnen Kompilierungseinheit (.cpp-Datei) erstellen.

Wählen Sie also eine CPP-Datei, und legen Sie die Definition dort. In diesem Fall entspricht die Definition der Deklaration, jedoch ohne das Schlüsselwort extern.

vector<uint64_t> V1; 
vector<uint64_t> V2; 
Verwandte Themen