Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - array einer klasse in funktion ansprechen
reptile - Mo 06.04.09 16:51
Titel: array einer klasse in funktion ansprechen
folgendes problem:
ich habe in meinem programm zwei klassen A und B. die klasse A besitzt als variable ein "array[0..5] of B"
nun will ich eine funktion schreiben, die als rückgabewert ein objekt der klasse A liefert. nur scheint es mir leider nicht möglich zu sein, in dieser funktion die felder in dem "array[0..5] of B" zu ändern, bzw überhaupt festzulegen. sobald ich das versuche erscheint eine fehlermeldung. alle anderen variablen von A lassen sich problemlos festlegen in der funktion, nur das array lässt sich nicht ansprechen. geht sowas etwa gar nicht ?
das sind die klassen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| TMovement = class(TObject) ID : integer; counter : integer; factor1, factor2, degree : real; end; TEnemy = class(TObject) x,z : real; movementlist : array[0..5] of TMovement; time, hp, move : integer; end; |
das ist die funktion:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function create_weak_fighter(hp, time : integer; x,z : real) : TEnemy; begin create_weak_fighter := TEnemy.Create; create_weak_fighter.x := x; create_weak_fighter.z := -15; create_weak_fighter.time := time; create_weak_fighter.hp := hp; create_weak_fighter.move := 0; create_weak_fighter.movementlist[0].ID := 2; << hier erscheint der fehler create_weak_fighter.movementlist[0].counter := 50; create_weak_fighter.movementlist[1].ID := 1; end; |
über die bedeutung der variablen braucht ihr euch keine gedanken zu machen..
Narses - Mo 06.04.09 16:59
Moin!
reptile hat folgendes geschrieben : |
| falls gewünscht kann ich auch noch den entsprechenden code posten |
Es wäre sicher sinnvoll, mal die Deklatation deiner Klassen zu sehen. :nixweiss:
cu
Narses
JayEff - Mo 06.04.09 17:26
Ich weiß nicht, wie dein Konstruktor von TEnemy aussieht, aber wenn du ihn nicht verändert hast, fehlt die Speicherreservierung für TMovement:
create_weak_fighter.movementlist[0] := TMovement.Create;
Das kannst du aber im Konstruktor von TEnemy erledigen, wenn du sowieso alle 5 TMovements brauchst, oder aber im setter von Movementlist:
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: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
| TEnemy = class(TObject) x,z : real; movementlist : array[0..5] of TMovement; time, hp, move : integer; public constructor Create; end;
constructor TEnemy.Create; var i : Integer; begin inherited Create; for i := 0 to 5 do movementlist[i] := TMovement.Create; end;
TMovementList = array[0 .. 5] of TMovement;
TEnemy = class(TObject) x,z : real; time, hp, move : integer; private FMovementlist : TMovementList; procedure SetMovement(X: Integer; Value: TMovement); public property Movementlist[X : Integer] : TMovementList read FMovementlist write SetMovement; end;
procedure TEnemy.SetMovement(X: Integer; Value: TMovement); begin if not Assigned(FMovementlist[X]) then FMovementlist[X] := TMovement.Create;
FMovementlist[X].Assign(Value); end; |
Mit der zweiten Methode hab ich keinerlei Erfahrung, das hab ich jetzt alles aus den bereits in Delphi vorliegenden Klassen entnommen (Siehe z.B. TCanvas.Pixels und dessen Setter/Getter oder TPicture.SetGraphic). Die erste ist sicher einfacher zu implementieren.
Oder du nimmst halt einfach das, was ich zu allererst gesagt hab ;)
reptile - Mo 06.04.09 17:34
vielen dank, das hat geholfen (die erste methode)
jetzt im nachhinein ist mir das komplett klar weshalb das nicht funktionieren konnte, aber ich hab mal wieder den wald vor lauter bäumen nicht gesehen..
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!