AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi typisierte konstante verkettete Liste erweitern
Thema durchsuchen
Ansicht
Themen-Optionen

typisierte konstante verkettete Liste erweitern

Ein Thema von RSE · begonnen am 8. Mär 2011 · letzter Beitrag vom 8. Mär 2011
Antwort Antwort
RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#1

typisierte konstante verkettete Liste erweitern

  Alt 8. Mär 2011, 11:57
Delphi-Version: 5
Ich habe ein paar typisierte Konstanten, die zusammen eine verkettete Liste bilden:
Delphi-Quellcode:
const
  PCheckBoxEntry = ^TCheckBoxEntry;
  TCheckBoxEntry = record
    Text: String;
    Next: PCheckBoxEntry;
  end;

  KontStatusEntry2: TCheckBoxEntry = (
    Text: 'zwei';
    Next: nil);
  KontStatusEntry1: TCheckBoxEntry = (
    Text: 'eins';
    Next: @KontStatusEntry2);
  KontStatusEntries: PCheckBoxEntry = @KontStatusEntry1;
Gibt es eine Möglichkeit, diese Liste aus einer Methode heraus zu erweitern? Ich sehe das Problem bei der Gültigkeit der Variablen, die ich in der Methode erstellen und verwenden kann. Ist die Methode durchlaufen, will ich ja auf den neu hinzugefügten KontStatusEntry3 immernoch zugreifen können. Ich sehe hier 2 Ansätze:
  1. Mit Getmem in der Methode den Speicher reservieren und mit Freemem im finalization-Abschnitt der Unit wieder freigeben (erfordert eine globale Variable zur Verwaltung der erstellten Einträge)
  2. Im Konstruktor die Konstante "in die Klasse einlesen" (irgendwie in den private-Variablen abbilden) und mit dem private Konstrukt arbeiten
Ich finde beide Lösungen nicht schön/schnell umsetzbar. Vielleicht fällt euch noch was anderes ein?
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

AW: typisierte konstante verkettete Liste erweitern

  Alt 8. Mär 2011, 12:09
Zitat:
Gibt es eine Möglichkeit, diese Liste aus einer Methode heraus zu erweitern?
Liegt hier ein Designfehler vor? Warum willst du eine KONSTANTe ändern? (ich weiß das es möglich ist).
Und warum soll es nicht möglich sein das aus einer Methode heraus zu erledigen, sollte doch keinen Unterschied zu einer regulären funktion/procedure sein.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#3

AW: typisierte konstante verkettete Liste erweitern

  Alt 8. Mär 2011, 12:12
Nein, denn warum sollte man eine Konstante zur Laufzeit ändern wollen ... schließlicht sagt man doch extra, daß sie unveränderbar aka konstannt ist.

(OK, bei dieser Struktur würde es eventuell gehn, aber ich verrat nicht wie)

Lösung: nimm eine Variable.
Entweder global oder als Klassen-Variable in einer Klasse.
[edit] Gut, Letzteres geht in Delphi 5 wohl noch nicht.
PS: In ganz neuen Delphis gibt es auch Klassen-Konstruktoren, womit man Klassenvariablen initialisieren kann. (falls nochjemand soein Problem hat)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 8. Mär 2011 um 12:14 Uhr)
  Mit Zitat antworten Zitat
RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#4

AW: typisierte konstante verkettete Liste erweitern

  Alt 8. Mär 2011, 12:45
Mir schwant ich hab ´nen Denkfehler drin... Ob das Teil nun als Konstante oder als globale Variable deklariert ist, macht doch (in diesem Fall) keinen Unterschied:
Die Liste ist global, nun erstelle ich beim Eintritt in meine Methode (oder Prozedur, whatever) eine lokale Variable. Diese kann ich zwar problemlos in die Liste integrieren, beim Austritt aus der Methode verliert diese aber ihre Gültigkeit. Somit ist das gerade erstellte Element in der Liste nicht mehr vorhanden und ich bekomme (mit etwas Glück) eine Zugriffsverletzung, wenn ich es benutze.

Ergo: Es kann gar nicht anders gehen, als dass ich diese Liste zur Laufzeit nur als Startbelegung einer identischen Liste benutze, die ich in der Klasse zur Laufzeit anlege und warte und im Destroy auch selbst wieder komplett freigebe. Delphi gibt ja die am Anfang vorhandenen Elemente der "konstanten" Liste selbst frei, evtl. selbst hinzugefügte Elemente müsste ich grundsätzlich davon unterscheiden können, um sie auch selbst wieder freizugeben...

Manchmal hilft das Erklären des Problems doch schon, um zur Lösung zu kommen
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  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 12:47 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