AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Der linken Seite wird nichts zugewiesen "Extended Version"

Der linken Seite wird nichts zugewiesen "Extended Version"

Ein Thema von Bjoerk · begonnen am 16. Okt 2013 · letzter Beitrag vom 25. Okt 2013
Antwort Antwort
Seite 1 von 2  1 2   
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#1

Der linken Seite wird nichts zugewiesen "Extended Version"

  Alt 16. Okt 2013, 15:22
Delphi-Version: 2007
Ich hab folgende Records und eine Liste (Code ist schon etwas älter).

Delphi-Quellcode:
TQuer = record
private
  FIntergers, FFloats, FString..
public
  property Intergers, Floats, String.. read ... write ...
  procedure Clear;
end;

TStab = record
public
  QuerLeft: TQuer;
  QuerRight: TQuer;
  ..
  procedure CheckQuerRight;
end;

procedure TStab.CheckQuerRight;
var
  AQuer: TQuer;
begin
  AQuer.Clear;
  if QuerRight.Compare(AQuer) then
    QuerRight := QuerLeft;
end;

TStabList = class
private
  FItems: array of TStab;
public
  property Items[Index: integer]: TStab read GetItem write SetItem; default;
end;
Wenn ich von außen mit einer Instanz von TStabList ausführe
FStabList[I].CheckQuerRight; werden die Werte nicht in FStabList[I] übernommen?

Ist mir unverständlich? Ich hab doch QuerLeft bzw QuerRight public?
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.734 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Der linken Seite wird nichts zugewiesen "Extended Version"

  Alt 16. Okt 2013, 15:28
Wenn ich's richtig sehe, ist das Problem, dass FStabList[I] per Wert einen temporären Record zurückliefert. Du erhältst keine Referenz auf den Record innerhalb von FItems! Auf diesem temporären Record führst du dann CheckQuerRight aus, und das schreibt auch brav alles da rein, was rein muss. Nur danach löst sich der temporäre Record in Luft auf... und das war's.

Zwei schnelle Lösungen, die mir einfallen, wären:
  • Führe eine Property ein, die einen Zeiger auf TStab zurückliefert.
  • Mache FItems public.
Beides nicht soooo elegant.
Uli Gerhardt

Geändert von uligerhardt (16. Okt 2013 um 15:31 Uhr)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Der linken Seite wird nichts zugewiesen "Extended Version"

  Alt 16. Okt 2013, 15:33
Hallo Uli,
versteh ich dennoch nicht? Das wird doch innerhalb der Klasse TStab geändert. Da ist der Wert doch verfügbar und keine temporäre Kopie?

Gruß
Thomas

Edit: Ja, find ich auch nicht so schön, dann hab ich keine default property mehr.
  Mit Zitat antworten Zitat
Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#4

AW: Der linken Seite wird nichts zugewiesen "Extended Version"

  Alt 16. Okt 2013, 15:39
Hallo Uli,
versteh ich dennoch nicht? Das wird doch innerhalb der Klasse TStab geändert. Da ist der Wert doch verfügbar und keine temporäre Kopie?
TStab ist keine Klasse, eine Funktionsrückgabe von Record macht eine Kopie


Edit: Ja, find ich auch nicht so schön, dann hab ich keine default property mehr
Mach' aus TStab eine Klasse und alles ist gut
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Der linken Seite wird nichts zugewiesen "Extended Version"

  Alt 16. Okt 2013, 15:46
Logo, als KLasse und TObjectlist, so würde ich das auch heute machen..

BTW, es gibt keinen Funktionsaufruf sondern die Klasse TStab ändert intern eine Variable. Beim anschließenden Read eines Items sollte der doch verfügbar sein ??
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Der linken Seite wird nichts zugewiesen "Extended Version"

  Alt 16. Okt 2013, 15:55
RecordA := RecordB; Soll das funktionieren bzw. ausreichend sein um alle Eigenschaften zuzuweisen?
(Ich habe lange nichts mit Records gemacht... )
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

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

AW: Der linken Seite wird nichts zugewiesen "Extended Version"

  Alt 16. Okt 2013, 16:03
BTW, es gibt keinen Funktionsaufruf sondern die Klasse TStab ändert intern eine Variable. Beim anschließenden Read eines Items sollte der doch verfügbar sein ??
Mit FStabList[I] holst du dir eine Kopie des Records und führst dann darauf die Prozedur aus. Die Änderungen machst du daher in der Kopie.

Es geht an der Stelle nur mit Pointern, also am sinnvollsten wie schon genannt mit Klassen.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Der linken Seite wird nichts zugewiesen "Extended Version"

  Alt 16. Okt 2013, 16:29
@jaenicke

Stimmt
Ich hatte mir immer merken wollen, dass Records quasi wie Strings übergeben bzw. verarbeitet (die Bytes also kopiert) werden.
Insofern müsste meine Frage von oben mit ja beantwortet werden - richtig?

Das kommt davon, wenn man nur noch mit Klassen arbeitet
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Der linken Seite wird nichts zugewiesen "Extended Version"

  Alt 16. Okt 2013, 16:33
Falls nur Wertetypen oder stat Arrays kann man records so umspeichern.

Klassen kann ich da keine mehr draus machen. Dann halt die public Items.

Danke für die Antworten!
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Der linken Seite wird nichts zugewiesen "Extended Version"

  Alt 16. Okt 2013, 16:43
Vielleicht doch noch was.

Statt eines Array eine TList bringt an der Stelle ja nichts, weil die Items laufen dort ja auch über den Getter. Richtig?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:59 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