[gelöst]Problem beim Casten von Zeiger
-
Hallo zusammen,
bin da auf ein Problem beim Casten von Zeigern gestossen.
Und zwar will ich eine Klasse an einen TreeViewNode anhängen.
Wenn ich jetzt aber meinen Zeiger nach Void caste, wird er einfach zu 'NULL' und die Eigenschaften meiner Klasse sind somit nicht mehr erreichbar.
Woran könnte das liegen?
Gruß
Arno
-
Hallo
Ein Zeiger wird höchsten durch dynamic_cast NULL, und der dürfte bei Konvertierung nach void * nicht durch den Kompiler kommen. Zeig mal den relevanten Code.
bis bald
akari
-
Hallo Akari,
die Klasse clTreeViewNode baut auf dieser:
von Joe_M. auf. Elementfunktionen hab ich ergänzt, Konstuktoren auskommentiert.
Beispiel:
void __fastcall clTreeViewNode::SetId(int value) { FId = value; } //--------------------------------------------------------------------------- int __fastcall clTreeViewNode::GetId() { return FId; }Relevanter Code:
clTreeViewNode* clnSelected = (clTreeViewNode*) tnSelected->Data; clnSelected->Id = 1;nach dem Cast 'clTreeViewNode*.....' ist clnSelected 'NULL' und die Eigenschaft Id nicht mehr ansprechbar.
Bin echt am verzweifeln.
Gruß
Arno
-
Bin mir nicht sicher ob ich das Problem jetzt 100%ig gleöst habe.
Nach nochmaligem Debuggen bin ich darauf gekommen das Data vorher schon 'NULL' war und somit auch richtig gecastet wurde.
Dann ist mir aufgefallen, dass ich nicht clTreeNode an TTreeNode hänge sondern umgekehrt!
Müsste der Cast nicht folgendermassen aussehen?
tnSelected->Data = (void*) clnSelected;Gruß Arno
Edit:
Der vorherige Cast stimmt natürlich.tnSelected->Data = (void*) clnSelected;wird für zwar für das Anhängen benutzt, aber im Relevanten Code wird gelesen und somit zurück von 'void' nach 'clTreeViewNode' gecastet.
Data war 'NULL' weil ich clTreeViewNode noch nicht angehängt hatte.Boah, krass viel gelernt heute!!