Statische variable in einer Header-Datei
Statische variable ' file scope. Sagen, ich habe zwei folgenden Dateien bestehen:
- Datei1.h
- file1.cpp
- Datei2.h
- file2.cpp
Habe ich static deklarierte variable sagen static int Var1
sowohl in der header-Dateien. Beide file1.h
und file2.h
sind enthalten in main.cpp
Datei.
Ich Tat dies, da die statische variable wird im Datei-Bereich, damit es nicht in Konflikt zueinander.
Aber nach dem kompilieren habe ich gefunden, es zeigt den Konflikt.
Nun statische variable verhält sich wie eine extern
variable. Auf der anderen Seite, wenn ich erklären die statische variable in beiden .cpp-Dateien, kompiliert er auch.
Ich bin nicht in der Lage, dieses Verhalten zu verstehen.
Kann jeder Körper erklären, wie Umfang und Verknüpfung der Arbeit in diesem Szenario.
- Verwandte, siehe nicht definiert eine Unbenannte Namensraum in einer header-Datei
Du musst angemeldet sein, um einen Kommentar abzugeben.
Statische Variablen sind lokale auf der compilation unit. Eine compilation-unit ist im Grunde ein
.cpp
- Datei mit dem Inhalt der.h
Datei eingefügt in die Stelle jedes#include
Richtlinie.Nun in einer compilation-unit, die Sie nicht haben können zwei Globale Variablen mit dem gleichen Namen. Dies ist, was passiert in Ihrem Fall:
main.cpp
umfasstfile1.h
undfile.h
sind, und jede der zwei Header definiert Ihre eigeneVar1
.Logisch, wenn dies zwei unterschiedliche Variablen, diesen unterschiedliche Namen geben (oder geben Sie Sie in unterschiedlichen namespaces).
Wenn diese die gleiche variable, verschieben Sie es in eine separate header-Datei
var1.h
, und gehörenvar1.h
von beidenfile1.h
undfile2.h
, nicht zu vergessen die #include guard invar1.h
.Statische Variablen haben übersetzungseinheit Umfang (in der Regel ein
.c
oder.cpp
- Datei), aber eine#include
Richtlinie lediglich kopiert den text einer Datei wörtlich, und nicht einer anderen übersetzungseinheit. Nach der Vorverarbeitung folgt aus:Verwandelt sich in diese:
Die, wie Sie wissen, ist ungültig.
Vorausgesetzt statische variable
static int Var1
ist im globalen Gültigkeitsbereich in der sowohl die Kopf-und umfasste sowohl die Header inmain.cpp
. Nun, wird zuerst der Präprozessor kopiert den Inhalt der enthaltenen Dateien auf diemain.cpp
. Damain.cpp
es istVar1
erklärt sich zweimal in dem gleichen Umfang, mehrfache Deklaration Fehler entstehen. ( ich.e, einer kopiert vomfile1.h
ist und die andere Artfile2.h
durch den pre-Prozessor)Jede Quelldatei wird individuell erstellt. Nun, wenn Sie erklären separat in Ihren Quell-Dateien, wobei jede source-Datei ist in Unkenntnis der Existenz des anderen statischen Variablen in den anderen source-Datei mit dem gleichen Namen. So, der compiler nicht einen Fehler melden. Sie können markieren Sie Sie als extern, wenn Sie möchten, eine variable geteilt werden unter den source-Dateien.