AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen FreePascal Create mit eigenen Parametern will nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Create mit eigenen Parametern will nicht

Ein Thema von TForm1 · begonnen am 29. Mär 2014 · letzter Beitrag vom 30. Mär 2014
Antwort Antwort
TForm1

Registriert seit: 11. Jan 2014
128 Beiträge
 
FreePascal / Lazarus
 
#1

Create mit eigenen Parametern will nicht

  Alt 29. Mär 2014, 19:47
Hallo zusammen,
ich habe wieder ein Problem und zwar habe ich bei einer Bestimmten Klasse einen Constructor, der wie folgt aussieht:
Delphi-Quellcode:
constructor TMeineKlasse.Create(index: integer);
begin
   inherited Create;
   self.FIndex:= index;
   self.FWert:= StrToInt(VerwaltungsKlasse.Array[index].Wert);//Hier stürzt das Programm ab.
end;
Ich habe eigentlich schon alles gecheckt, VerwaltungsKlasse ist initialisiert, das Array ist gefüllt und eigentlich dürfte nichts schiefgehen, oder gibt es da wieder Regeln bezüglich bestimmter Dinge, die man beim Create nicht tun sollte?
Das Array ist übrigens gefüllt mit Records mit verschiedenen Werten.
Der Fehler sitzt immer vor dem Computer...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Create mit eigenen Parametern will nicht

  Alt 29. Mär 2014, 19:55
Übergib lieber den Wert und greife nicht auf ein externes Objekt zu. Du kannst Dir nicht seicher sein, ob dieses existiert, für die Unit sichtbar ist oder ein anderes Objekt im Scope ist.
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Create mit eigenen Parametern will nicht

  Alt 30. Mär 2014, 08:40
Hallo,

wie äußert sich der Absturz?
Wie viele Einträge hat das Array, welchen Wert hat Index ?
Womit beginnt das Array, mit 0 oder 1?
Den Parameter solltest die besser AIndex nennen,
Dann musst du nicht mit Self hantieren (hier ja eh nicht).

Setze mit F5 einen Breakpoint und schau dir deine Variablenwerte an.

Heiko
Heiko
  Mit Zitat antworten Zitat
TForm1

Registriert seit: 11. Jan 2014
128 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Create mit eigenen Parametern will nicht

  Alt 30. Mär 2014, 11:54
Also, in der VerwaltungsKlasse wird beim Create das Array aus einer Typisierten Datei geladen. Dazu wird einfach in einer Schleife von 0 hochgezählt. Da ich entsprechend synchron eine Liste mit Instanzen von TMeineKlasse benötige, wird noch in der Schleife jeweils ein Objekt von TMeineKlasse erzeugt und der Liste hinzugefügt. Schon beim 1. Create von TMeineKlasse kracht es, da ist der Index noch 0.
Fehlermeldung ist nur das bekannte EXC_BAD_ACCESS. Könnte es vielleicht daran liegen, dass ich das Create praktisch noch im Create von der VerwaltungsKlasse aufrufe? Wie ließe sich das sonst lösen, denn ich muss ja irgendwie doch auf die VerwaltungsKlasse zugreifen können?
Der Fehler sitzt immer vor dem Computer...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#5

AW: Create mit eigenen Parametern will nicht

  Alt 30. Mär 2014, 12:12
Wie ließe sich das sonst lösen, denn ich muss ja irgendwie doch auf die VerwaltungsKlasse zugreifen können?
Hier scheint ein Designfehler vorzuliegen. Man sollte das nach Möglichkeit so planen, dass zwar die Verwaltungsklasse die Datenklasse kennt, aber nicht umgekehrt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Create mit eigenen Parametern will nicht

  Alt 30. Mär 2014, 12:32
Könnte es vielleicht daran liegen, dass ich das Create praktisch noch im Create von der VerwaltungsKlasse aufrufe?
Die Variable VerwaltungsKlasse wird ja erst nach dem Aufruf von Create zugewiesen, denn zuerst muss der Rückgabewert (das erzeugte Objekt) durch die Funktion Create zurückgegeben werden.

Wie ließe sich das sonst lösen, denn ich muss ja irgendwie doch auf die VerwaltungsKlasse zugreifen können?
Theoretisch kannst du diese Klasse mit übergeben oder (wie es ohnehin sinnvoll ist) nicht im Konstruktor auf externe Abhängigkeiten zugreifen und das erst in einer separaten Initialisierungsmethode machen. Aber wie DeddyH schon schrieb ist das generell ungünstig.

Es gibt mehrere Möglichkeiten das zu lösen. Zum Beispiel kannst du einen direkten Zugriff auf die andere Klasse in der einen und Events in der anderen Richtung nutzen.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
TForm1

Registriert seit: 11. Jan 2014
128 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Create mit eigenen Parametern will nicht

  Alt 30. Mär 2014, 13:49
Hier scheint ein Designfehler vorzuliegen. Man sollte das nach Möglichkeit so planen, dass zwar die Verwaltungsklasse die Datenklasse kennt, aber nicht umgekehrt.
Ich habe das Problem jetzt so gelöst, indem ich beide Parameter mit übergebe und nicht nur den Index. Dann kann ich ja innerhalb der Create-Methode von der VerwaltungsKlasse problemlos auf das Array zugreifen. Ist ein bisschen mehr Schreibarbeit beim Aufrufen, aber dann tritt wenigstens kein Fehler auf.
Der Fehler sitzt immer vor dem Computer...
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#8

AW: Create mit eigenen Parametern will nicht

  Alt 30. Mär 2014, 19:56
Ich habe das Problem jetzt so gelöst, indem ich beide Parameter mit übergebe
Ja so ist es richtig.
Dazu noch ein kleines Beispiel:
Wenn du an einem Kiosk (Klasse TKiosk) eine Zeitung (TProduct) kaufen möchtest, übergibst du dann deinen Geldbeutel (TWallet) damit der Kioskbesitzer sich das Geld entnimmt oder übergibst du direkt den Geldbetrag (TMoney)?
fork me on Github
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz