Zeiger der Basisklasse initiieren
-
Hey ich habe folgendes Konstrukt:
class Base { protected: int *integer; public: void Init() { integer = new int; }; virtual void Create() = 0; virtual void Destroy() = 0; }; class Der : public Base { void Create() { Base::Init(); }; void Destroy() {}; };jedoch wenn ich über Der auf integer zugreifen will hat dieser keinen Wert..
was mach ich also falsch?
-
Hallo
Was verstehst du unter "keinen Wert"? Übrigens reservierst du zwar Speicher aber dieser bleibt Unitialisiert. Und hoffentlich hast du für die Klasse Base noch einen Destruktor der integer wieder löscht. Ich würde außerdem im Konstruktor von Base den Pointer integer wenigstens auf 0 setzen, um zu signaliseren das noch kein Speicher reseviert wurde.
bis bald
akari
-
naja er bringt eine Exception, wo drin steht das integer nochimmer den Wert
0x0000000 oder so hat, sprich kein Speicher belegt.
-
Weder Base noch Der haben irgendwelche Konstruktoren, die eine dieser Funktionen aufrufen würden. Init wird also nie durchlaufen, was erwartest Du da?

-
Hallo
Wer bringt wo eine Exception (Merke : in dem gezeigten Codeausschnitt steht nichts von throw, if oder einem Zugriff auf integer)
Benutzt den Debugger oder manuelle Debug-Ausgaben auf der Konsole und verfolge den Verlauf deines Programms und die Werte deiner Variablen.
bis bald
akari
-
nein die Visual Studio IDE schmeißt mich aus dem Programm raus und sagt dass wenn ich mit integer arbeiten will, zb Wertzuweisung mache, dann stopt er dort..
-
_carnage schrieb:
nein die Visual Studio IDE schmeißt mich aus dem Programm raus und sagt dass wenn ich mit integer arbeiten will, zb Wertzuweisung mache, dann stopt er dort..
Zurecht, denn
LordJaxom schrieb:
Weder Base noch Der haben irgendwelche Konstruktoren, die eine dieser Funktionen aufrufen würden. Init wird also nie durchlaufen, was erwartest Du da?

Gruß,
Simon2.