Statische Member-Array in C++
Ich habe eine statische member-array in die Klasse GTAODV
.
static int numdetections[MAXNODES];
Jedoch, wenn ich versuche, Zugriff auf das array innerhalb der Klasse Methoden (Beispiele unten),
numdetections[nb->nb_addr]++;
for(int i=0; i<MAXNODES; i++) if (numdetections[i] != 0) printf("Number of detections of %d = %d\n", i, numdetections[i]);
der linker einen Fehler während der Kompilierung:
gtaodv/gtaodv.o: In function `GTAODV::command(int, char const* const*)':
gtaodv.cc:(.text+0xbe): undefined reference to `GTAODV::numdetections'
gtaodv.cc:(.text+0xcc): undefined reference to `GTAODV::numdetections'
gtaodv/gtaodv.o: In function `GTAODV::check_malicious(GTAODV_Neighbor*)':
gtaodv.cc:(.text+0x326c): undefined reference to `GTAODV::numdetections'
gtaodv.cc:(.text+0x3276): undefined reference to `GTAODV::numdetections'
collect2: ld returned 1 exit status
Warum geschieht dies?
- Weil dein linker nicht wissen, die definition von
numdetections
. Wo sind Sie Sie diese variable verwenden, und wo ist die definition? - Ich habe numdetections in der Klasse GTAODV, und ich bin mit es in der GTOADV member-Funktionen.
- poste bitte den code...
- Geben Sie das code-Beispiel. Wo genau, das Sie definiert haben
numdetections
? - Sie sagte, Sie definiert numdetections in der Klasse GTAODV - tatsächlich, Sie "erklärt" es. Die definition fehlt, das ist, warum Sie werden immer Linker-Fehler. Auch, Sie bearbeitet die ursprüngliche Frage also nun die Antworten' Kontext fehlt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn dieser Fehler Auftritt, ist es sehr wahrscheinlich, dass Sie vergessen haben, definieren Sie Ihre statischen member. Angenommen, die innerhalb der Klassendefinition:
Innerhalb einer Quellcode-Datei:
Beachten Sie die definition, die außerhalb der Deklaration in der Klasse.
Bearbeiten Dies sollte auch die Antwort auf die Frage nach dem "warum": statische Elemente existieren können, ohne die Existenz eines konkreten Objekts, ich. e. Sie können
numdetections
ohne Instanziierung alle ObjektGTAODV
. Um dies zu ermöglichen externe Bindung muss möglich sein und damit eine definition der statischen Variablen müssen vorhanden sein, für Referenz: Statische Daten-member (nur C++).