Så er det jeg overhovedt ikke fatter, hvordan det har kunne virke med den gamle kode! AddObject forventer en TOBJECT pointer som anden argument. Jeg caster godt nok, men jeg caster jo ikke med adresser til en værdi.
Hvordan har det kunne kompile, og hvorfor har det kunne virke?
Det har kunne compile fordi der ikke er noget forkert ved at assigne en pointer værdien 1... (det er jo bare et tal der angiver en adresse, altså en adresse er ikke nogen specifik type...)
Det har virket hvis du har brugt værdien af pointeren og ikke "det den peger på" i dit program.
Det er jo netop det, der er jo ikke en egentlig adresse-type. Det er bare en 32bit værdi som du assigner tallet -1 til. Hvorfor skulle den ikke stadig have værdien -1 når du læser den igen?
Når vi snakker om adresser er det selvfølgelig unaturligt at have negative tal, men selvom det måske er en unsigned int, kan den stadig have samme bitmønster.
Ex:
int nTal1 = -1; unsigned int adr = nTal1; // bitmønstret kopieres = 4294967295 for en unsigned int
Prøv fx noget lign.:
int nTal1 = -1; cout << nTal1 << endl; unsigned int adr = nTal1; cout << adr << endl; int nTal2 = adr; cout << nTal2 << endl;
1) Det har kunnet kompilere fordi værdien 1 er ok for en pointer. (Til et TObject i dette tilfælde.)
2) Det har -formentlig- virket fint, fordi det et dig der anvender pointeren, og du ved jo, at du bare har puttet en int ned i pointeren. Du kan derfor -med held- caste *(int *)ComboBox1->Items->Object;
Mht. til at "pointe" til en rigtig struct (eller class), som mener jeg principielt at det kun er tilrådeligt hvis dit struct (eller class) array ligger til grund for det som er puttet i combo-boxen. Ved at lave new int(n); som ovenfor, oprette du bare en pointer til en nyt element - og mister kontrollen (samt pointeren) til det element i det øjeblik du f.eks. laver ComboBox1->Items->Clear(); Hvis du derfor ikke passer på, ender du med at lave memory leaks - vel at mærke den slags, som operativsystemet ikke kan rydde op i selv ! (Re-boot er eneste løsning under Windows !)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.