Ik heb een probleem met het typecasten van een pointer in een object. Zie deze simpele code:
Dit vindt de Delphi Watch:
Wat ik denk dat het probleem is: Delphi vergelijkt stiekem het adres van geldig met true. Als de pointer niet in een object zou zitten, dan zou er een extra ^ bij moeten komen. Maar helaas, de pointer zit nu eenmaal in een object. Als ik toch de ^ achter Data erbij stop, dan wordt het resultaat nil. Logisch, want objecten zijn zelf al pointers. Achter een object hoeft nooit een ^, want deze staat er al automatisch.
Hoe zorg ik ervoor dat (geldig = true) als true wordt herkend en het if statement dus wordt uitgevoerd
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
| var MyTreeNode : TTreeNode; geldig : Boolean; waar : Boolean begin waar := true; MyTreeNode.Data = @waar; //Data is een pointer. geldig := boolean(MyTreeNode.Data); if (geldig = true) then //Dit gebeurt helaas nooit. end; |
Dit vindt de Delphi Watch:
Delphi:
1
2
3
| waar = true geldig = true (geldig = true) = false |
Wat ik denk dat het probleem is: Delphi vergelijkt stiekem het adres van geldig met true. Als de pointer niet in een object zou zitten, dan zou er een extra ^ bij moeten komen. Maar helaas, de pointer zit nu eenmaal in een object. Als ik toch de ^ achter Data erbij stop, dan wordt het resultaat nil. Logisch, want objecten zijn zelf al pointers. Achter een object hoeft nooit een ^, want deze staat er al automatisch.
Delphi:
1
2
| geldig := boolean(MyTreeNode.Data^); //Dit resulteert in een error, want de rechterkant van de expressie is nil. |
Hoe zorg ik ervoor dat (geldig = true) als true wordt herkend en het if statement dus wordt uitgevoerd
[ Voor 21% gewijzigd door dr snuggles op 30-07-2006 14:37 ]