Multiple Definitionen eines Pointers
lima-city → Forum → Programmiersprachen → C/C++ und D
assembler
benutzer
code
datei
datenstruktur
element
erkennen
erweitern
fehler
funktion
header
jemand
kompletten code
kritik
nette sache
null
pointer
pop
posten
realisieren
-
Hallo...
Ich will gerade eine Stack-Datenstruktur programmieren.
Dazu brauche ich eine globale Pointer-Variable auf das erste Element des Stacks.
Diese Variable habe ich in der header-Datei "stack.h" deklariert.
Das ganze sieht so aus:
StackEntry* pStack = NULL;
In der zugehörigen cpp-Datei sind die ganzen Methoden (push, pop, ...) drinnen.
Wenn ich jetzt aber von main() aus versuche, über pop einen Stack aufzubauen, kommt beim kompilieren der Fehler "multiple definitions of pStack".
Kann mir jemand erklären warum?! Ich habe den Pointer auf das erste Element doch nur einmal global gesetzt. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
hmm wäre es nicht einfacher das ganze über Inline-Assembler in C ( also über asm { /*... code ...*/ } ) zu implementieren und auch schneller da systemnaher o0? Du hättest dann über ESP und EBP genug möglichkeiten den Stack anzuspringen ^^. Soll jetzt keine Kritik sein möchte nur wissen was du realisieren willst
Beitrag zuletzt geändert: 12.4.2009 1:15:34 von kelvar -
Kannst du bitte den kompletten Code posten? Mit der einen Zeile lässt sich kein Fehler erkennen.
@kevlar: Der Prozessorstack mag zwar eine nette Sache sein, aber das Problem ist, dass der Stack schon für andere Sachen benutzt wird und da dann von allen Seiten fröhlich gepusht und gepopt wird. Wenn jetzt eine andere Funktion irgendwas auf den Stack pusht, dann kannst du den "Benutzer-Stack" nicht erweitern, weil etwas anderes schon auf ihm "drauf" liegt. -
Hast du vielleicht die Headerdatei in mehreren C-Dateien mit #include eingebunden. Danach hört sich das nämlich an. Versuch's mal mit
#pragma once
oder mit
#ifndef __IRGENDWAS_WIRRES__ #define __IRGENDWAS_WIRRES__ //hier der Inhalt des Headers #endif
-
... oder extern
Und dann in Main() pStack=NULL;
Oder einfacher
#define pStack(i) __asm mov [ i ],ebp;
Dann ist:
int* Stackpointer;
pStack(Stackpointer);
Beitrag zuletzt geändert: 6.6.2009 0:14:49 von blitzmerker -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage