Die Verwendung von extern in c++
Ich habe Schwierigkeiten zu verstehen, wie "extern" funktioniert.
Ich habe Google gesucht, aber es scheint nicht zu sein, die speziellen Beispiel Fall ich versuche
Wenn ich eine Datei main.cpp die Verweise.h
und in ihm habe ich eine Liste namens LISTE1 (was ist ein double-array mit 100 x 100)
so habe ich doppelte List1[100][100];
wie kann ich diese Liste in one.cpp bitte?
extern double LIST1[100][100]
funktioniert nicht :/
main.cpp:
#include "one.h"
extern double LIST1[100][100];
one.cpp:
void one::useList()
{
for(j = 0; j < 100; j++)
{
for(i = 0; i < 100; i++)
{
LIST1[j,i] = 0.5;
}
}
}
Dies ist, was ich habe.
Fehler, die ich immer bin:
1>main.obj : error LNK2001: nicht aufgelöstes externes symbol "double (*
LIST1)[100]" (?LIST1@@3PAY0GE@NA)
InformationsquelleAutor der Frage Lilz | 2013-04-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer Variablen-Deklaration im namespace-Gültigkeitsbereich ist immer eine definition es sei denn Sie setzen
extern
auf; dann ist es nur eine Erklärung.Eine wichtige Regel in C++ ist, dass Sie können nicht mehrere Definitionen von Objekten mit dem gleichen Namen. Wenn Sie Ihre header-Datei enthalten
double LIST1[100][100];
das würde funktionieren, solange Sie immer nur eingeschlossen in einer übersetzung Einheit. Aber sobald Sie die header-Datei in mehreren übersetzungseinheiten, Sie haben mehrere Definitionen vonLIST1
. Sie haben gegen die Regel verstoßen!Also eine Globale variable zugegriffen, die aus mehreren übersetzungseinheiten, die Sie benötigen, um sicherzustellen, gibt es nur eine Deklaration in der header-Datei. Wir tun dies mit
extern
:Können Sie jedoch nur den Kopf und versuchen Sie, verwenden Sie dieses Objekt, weil es nicht eine definition noch. Diese
LIST1
Erklärung sagt nur, dass ein array von diesem Typ existiert irgendwo, aber wir wirklich brauchen, Sie zu definieren, um das Objekt zu erstellen. Also in eine einzige übersetzungseinheit (eine der.cpp
Dateien in der Regel), müssen Sie setzen:Nun, jedes Ihrer
.cpp
Dateien können die header-Datei und nur schon mal die Erklärung. Es ist völlig in Ordnung, haben mehrere Erklärungen über Ihr Programm. Nur eine Ihrer.cpp
Dateien dieser definition.InformationsquelleAutor der Antwort Joseph Mansfield
In C++, wie C, bevor es, jede Quelldatei kompiliert wird, um eine Objekt-Datei. Dann alle Objekt-Dateien verknüpft sind, erstellen Sie das ausführbare Programm.
Teilen Symbole (Funktionen, Globale Variablen), gibt es mehrere keywords, die dem compiler die lokale Datei, die privat sind, und welche importiert werden aus einer anderen Datei.
Die `extern' - Schlüsselwort bedeutet, dass ein symbol zugegriffen werden kann, aber nicht definiert. Es sollte definiert werden (als global), in einigen anderen Modul. Wenn nicht, erhalten Sie eine "undefined symbol' Fehler bei link-Zeit.
InformationsquelleAutor der Antwort Javier