Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Pointer
Sylvus - Fr 25.09.09 23:57
Titel: Pointer
Hay Leute, bin noch ziemlich ungeübt mit Pointern....darum hier ein ganz simples Problem:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| type TAnzeige = class(TObject) Grafik: array[1..8] of TImage; constructor Create(); destructor Destruct(); procedure switch(img: integer); procedure erzeuge(pos: TPoint; img_name: string); end;
Anzeige_pointer = ^TAnzeige; ... Anzeige_temp:Anzeige_pointer; ... Anzeige_temp:=@Anzeige; Anzeige_temp^[I] := TAnzeige.Create; Anzeige_temp^[I].erzeuge(temp_pos, 'BILD' + inttostr(I)); |
Wo ist das Problem? Das Problem ist, dass ich folgende Fehlermeldung erhalte:
[DCC Fehler] Unit1.pas(211): E2149 Klasse besitzt keine Standardeigenschaft
Ich weiß aber nicht, was genau falsch ist, vielleicht ist von euch einer so nett und erklärt mir mein Problem :)
DANKE & Grüße Sylvus
jaenicke - Sa 26.09.09 00:28
Naja... du hast einen Pointer auf eine Klasse und versuchst darauf wie auf ein Array zuzugreifen:
Sylvus hat folgendes geschrieben : |
Delphi-Quelltext 1: 2:
| Anzeige_temp:=@Anzeige; Anzeige_temp^[I] := TAnzeige.Create; | |
Standardeigenschaft hieße, dass du auf Anzeige.Grafik[i] auch mit Anzeige[i] zugreifen kannst. Genauso wie bei StringList.Strings[i] und StringList[i].
Ich habe keine Ahnung wozu du hier überhaupt Pointer auf Pointer verwenden willst. Denn schließlich ist eine Variable vom Typ TAnzeige ja bereits ein Pointer. :gruebel:
Sylvus - Sa 26.09.09 17:11
achso, ja war nur für mich, weil ich dachte ich muss das so machen... habs jetzt gerade so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| type
TAnzeige = class(TObject) Grafik: array[1..8] of TImage; Status: array[1..8] of boolean; constructor Create(); destructor Destruct(); procedure switch(img: integer); procedure erzeuge(pos: TPoint; img_name: string);
end; Anzeige_pointer = ^TAnzeige;
Anzeige_pointer:=@Anzeige[I]; Anzeige_pointer := TAnzeige.Create; Anzeige_pointer^.erzeuge(temp_pos, 'imgN' + inttostr(I)); |
aber da bekomm ich die Fehlermeldung: '(' erwartet.....
Wäre nett wenn du mir da nochmal hilfst!
Viele Grüße
Sylvus
Tryer - Sa 26.09.09 17:22
Sylvus hat folgendes geschrieben : |
Delphi-Quelltext 1:
| Anzeige_pointer:=@Anzeige[I]; | |
Was ist "Anzeige" ?
Warum "ernennst" du einen neuen destructor an Stelle von "Destroy" ?
Grüsse, Dirk
Sylvus - Sa 26.09.09 17:24
mir wurde gesagt, ich muss das so machen :)
Hier mal der "ganze" Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| var Anzeige: array[0..10] of TAnzeige;
implementation uses Unit1;
constructor TAnzeige.Create; var I: Integer; begin inherited Create; for I := 1 to 8 do begin self.Grafik[i] := TImage.Create(Form1); self.Grafik[I].Parent := Form1; end; end;
destructor TAnzeige.Destruct; var i: Integer; begin for i := 1 to 8 do self.Grafik[i].Free; inherited; end; |
Danke für die Hilfe!
Tryer - Sa 26.09.09 17:31
Dann ist Dein "Anzeige_pointer" doch wie bereits gesagt wurde völlig überflüssig.
Delphi-Quelltext
1: 2:
| Anzeige[i] := TAnzeige.Create; Anzeige[i].erzeuge(...) |
Sylvus - Sa 26.09.09 17:50
neeee- ich hab da ja verschiedene Arrays... ok es sieht so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| var Anzeige: array[0..10] of TAnzeige; AnzeigeS: array[0..10] of TAnzeige; AnzeigeU: array[0..10] of TAnzeige; AnzeigeUS: array[0..10] of TAnzeige;
if J = 0 then begin Anzeige_pointer:=@Anzeige[I]; Anzeige_pointer := TAnzeige.Create; Anzeige_pointer^.erzeuge(temp_pos, 'imgN' + inttostr(I)); if J = 1 then begin Anzeige_pointer:=@AnzeigeS[I]; Anzeige_pointer := TAnzeige.Create; Anzeige_pointer^.erzeuge(temp_pos, 'imgS' + inttostr(I)); ... |
und das wollte ich jetzt kürzer fassen... Danke!
Grüße Sylvus
Tryer - Sa 26.09.09 18:04
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| var Anzeige: array[0..10] of TAnzeige; AnzeigeS: array[0..10] of TAnzeige; AnzeigeU: array[0..10] of TAnzeige; AnzeigeUS: array[0..10] of TAnzeige;
case J of 0: begin Anzeige[I] := TAnzeige.Create; Anzeige[I].erzeuge(temp_pos, 'imgN' + inttostr(I)); end; 1: begin AnzeigeS[I] := TAnzeige.Create; AnzeigeS[I].erzeuge(temp_pos, 'imgN' + inttostr(I)); end; ... end; |
Die Verwendung des Pointers wird mir einfach nicht klar. Kann es sein das da was am Konzept noch nicht stimmt?
| Zitat: |
Delphi-Quelltext 1: 2:
| Anzeige_pointer := @Anzeige[I]; Anzeige_pointer := TAnzeige.Create; | |
Anzeige_pointer zeigt auf einen Eintrag im Array. Und was passiert dann in der zweiten Zeile, wird da ein TAnzeige erzeugt und an den Pointer zugewiesen oder wird das Element im Array erzeugt?
So wäre es eindeutig (und damit der Zeiger wieder überflüssig):
Delphi-Quelltext
1: 2:
| Anzeige_pointer := @Anzeige[I]; Anzeige_pointer^ := TAnzeige.Create; |
Sylvus - Sa 26.09.09 18:07
Na ich wollte das:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| var Anzeige: array[0..10] of TAnzeige; AnzeigeS: array[0..10] of TAnzeige; AnzeigeU: array[0..10] of TAnzeige; AnzeigeUS: array[0..10] of TAnzeige;
case J of 0: begin Anzeige[I] := TAnzeige.Create; Anzeige[I].erzeuge(temp_pos, 'imgN' + inttostr(I)); end; 1: begin AnzeigeS[I] := TAnzeige.Create; AnzeigeS[I].erzeuge(temp_pos, 'imgN' + inttostr(I)); end; ... end; |
so schreiben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| var Anzeige: array[0..10] of TAnzeige; AnzeigeS: array[0..10] of TAnzeige; AnzeigeU: array[0..10] of TAnzeige; AnzeigeUS: array[0..10] of TAnzeige;
for J:=1 to 4 do begin
case J of 1: pointer:=Anzeige 2: pointer:=AnzeigeS 3: pointer := AnzeigeU ...
pointer[I] := TAnzeige.Create; pointer[I].erzeuge(temp_pos, 'imgN' + inttostr(I));
... end; end; |
//habs jetzt glaub ich geschafft, trotzdem wenn ihr meint das ist unsinnig dann sagt mir das bitte :) Will ja einen ordentlichen Code!
HelgeLange - Sa 26.09.09 18:10
Du mixt alten Code mit neuem ohne zu wissen, was Du eigentlich machst. Entweder Du willst mit Objekten Arbeiten (Deiner TAnzeige, die 8 TImage hält oder so) oder Du willst mit Arrays arbeiten.
Tryer - Sa 26.09.09 18:11
Du willst also keine Anzeige, sondern ein AnzeigeArray auswählen
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| type TAnzeigeArray = Array[0..10] of TAnzeige
var Anzeige, AnzeigeS: TAnzeigeArray;
..
var AnzArray: TAnzeigeArray;
Case J of 1: AnzArray := Anzeige;
AnzArray[i] := TAnzeige.Create; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!