Folgendes Problem liegt bei mir an...
Im Normalfall kann man ja einen Pointer der Klasse1 durch:
Klasse2 := Klasse1;
setzen... wenn ich nun Klasse2 aufrufe, bekomme ich den inhalt von Klasse1 oder? bzw. werde darauf hin verwiesen...
Ich versuchte es jetzt so:
Code:
TPlayer =class(TObject)
public
//constructor Create; override;
procedure AddPlanet(aPlanet: TPlanet);
//destructor Destroy; override;
public
IP:string;
Planets:arrayof TPlanet;// ####### Dieser array soll am ende nur Pointer auf andere Klassen haben, die unten gezeigt werden....
end;
TPlayerCon =class(TObject)
public
//constructor Create; override;
function Add():integer;
procedure SetStartPlanet();
destructor Destroy;override;
public
PlayerCon:arrayof TPlayer;
end;
implementation
{constructor TPlayerCon.Create;
begin
end;}
function TPlayerCon.Add():integer;// ####### <---- Diese funktion rufe ich auf
Planets:arrayof Tplanet;// ####### Hier drauf sollen die Verweise verweisen <!-- s;-) --><img src=\"{SMILIES_PATH}/icon_wink.gif\" alt=\";-)\" title=\"Wink\" /><!-- s;-) -->
SelPlanet:integer;
end;
Code:
procedure TPlayer.AddPlanet(aPlanet: TPlanet);
begin
SetLength(Planets,high(Planets)+2);
Planets[high(planets)+1]:= aPlanet;
end;
Aber wenn ich jetzt beim "debuggen" mit der maus über -- PlayerCon[l] -- gehe, dann zeigt er mir an das eine klasse existiert, aber das die werte alle = 0 sind.
Obwohl er mir die richtigen werte anzeigt, wenn ich auf -- Planeten.Planets[l] -- gehe... Wie bekomme ich das in den Griff??
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Zunächst einmal redest du von Objekten und nicht von Klassen - das war das erste, was mich verwirrt hat. Das zweite: Irgendwie passt der Inhalt deiner Add-Funktion nicht zu dem, was sie zu sein scheint, wenn ich mir den Aufruf anschaue. Erstmal ist der Name ein anderer (Add <=> AddPlanet; ganz zu schweigen von dem fehlenden Paramter). Dann arbeitest du da mit einem Array, welches irgendwie mehr nach Playern als nach Planeten aussieht. Das könnte eventuell auch der Grund für komische Werte sein.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Mir ist klar, dass es im grunde genommen so sein sollte.
Das Problem ist aber, dass es offensichtlich nicht so ist, denn sonst würde es funktionieren. Ich empfehle, einfach mal step by step durch den Code zu debuggen (am besten, per Breakpoint vor dem Aufruf der Add-Methode einspringen) und dann schauen, was da genau passiert. Wie gesagt, was du da gepostet hast, scheint mir überhaupt nicht zusammen zu passen.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
EDIT: Im prinzip sollen die spieler alle planeten, die sie erobert haben als pointer in ein array bekommen... und AddPlanet(planet auf den verweist werden soll) soll das machen...
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
High() gibt, anders als Length (gibt die Länge zurück, muss man also minus 1 rechnen, um auf den größtmöglichen Index zu kommen), den größtmöglichen Index zurück. Darauf noch +1 zu rechnen, ist wahrscheinlich keine gute Idee.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ohne konkret zu wissen wie es in Delphi ist,
aber ein Array zu verlängern ist ziemlich unperformant. Nutz doch lieber eine Liste. Die ist dazu da um dynamische Speicher zu verwalten. Und du kannst leicht sachen ranhängen und wieder rauslöschen.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Man kann das Array auch gleich um 32 oder mehr Einträge, was der Umstand halt hergibt, erweitern. Das verbraucht zwar mehr Speicher, bei Pointern aber eher zu vernachlässigen. Man muss halt eine zusätzliche Variable anlegen, die angibt wie viele "echte" Einträge dabei sind.
@Sellmann, woher nimmst du deine Behauptung? ^^
Die TList in Delphi ist genau so schnell wie jedes andere array, ist im Hintergrund ja schließlich auch ein Array am Werkeln Es ist keine verlinkte Liste, was du vielleicht vermutest.
Pardon, sie ist natürlich schneller, weil sie seltener vergrößert werden muss *g*
@Markus: Oder gleich TList verwenden... Das macht haargenau das.
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Wieso schwach? Dass das keine echte verkettete Liste ist?
Je nach Anwendungsfall ist mal das eine, mal das andere besser.
Willst du auf beliebige Elemente zugreifen? -> Array, da du nicht über die Liste iterieren musst.
Fügst du oft Sachen hinzu / löschst welche? -> Liste, da nur an- / umgehängt werden muss.
Registriert: Fr Jan 04, 2008 21:29 Beiträge: 419 Wohnort: Lübeck
ich meine mit schwach, dass einem in Delphi n Array als linkedList verkauft wird. Was bringt es dir zu wissen wie du auf die Daten zugreifen willst, wenn sich hinter einem Namen nicht das verbirgt was man vermutet?
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.