Autor |
Beitrag |
IhopeonlyReader
      
Beiträge: 600
Erhaltene Danke: 23
Delphi 7 PE
|
Verfasst: Do 09.05.13 19:22
Ich habe eine Verkette Liste erstellt, als Inhalt hat es ein Record names RAccount...
mir gelingt es nicht die "account loeschen" procedure zu erstellen..
der fehler liegt beim setzten des neuen Endes !
Ende := pointer^.before;
zeigt inkompatible typen obwohl sowohl before, als auch Ende vom Typ ^TSpeicher sind..
Ende := @(pointer^.before^);
lässt zwar das kompilieren zu, gibt aber danach (beim neuen acc-erstellen oder sonst wo) fehler aus !
ich habe die Unit + Test-projekt angehängt...
wäre nett wenn ihr es euch mal anschaut und den Fehler nennt... (ja ich habe nicht die "Standart-Begriffe" verwendet, und ob es eine "richtige" verkette Liste ist, weiß ich auch nicht...
Wie gesagt bin selbst-beibringer und daher bin ich manchmal sehr gewöhnungsbedürftig in meiner programmierart
Einloggen, um Attachments anzusehen!
_________________ Sucht "neueres" Delphi
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 09.05.13 23:17
Moin!
Nur damit ich sicher bin, dich richtig verstanden zu haben: - Du hast ein Problem
- Du hältst dich nicht an die Standards
- Wir sollen uns an deine "Art des Programmierens" anpassen (wobei hier "Art" schon fast angelsächsisch gemeint scheint
)
- Du gibst eine eher "kurze" Fehlerbeschreibung ohne Stelle an und haust mal eben den kompletten Code raus
Hab ich was übersehen?
cu
Narses
//EDIT: Ich bin mal nicht so  Suchen liefert sowas hier:
www.entwickler-ecke.....php?p=650275#650275
Kannst auch mal nach LINEARE LISTE suchen. 
_________________ There are 10 types of people - those who understand binary and those who don´t.
Für diesen Beitrag haben gedankt: FinnO, Mathematiker, Xion
|
|
IhopeonlyReader 
      
Beiträge: 600
Erhaltene Danke: 23
Delphi 7 PE
|
Verfasst: Fr 10.05.13 00:34
ja  nur ich arbeite auch mit einem Zeiger nach hinten!
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| type TKnoten = class before: ^TKnoten; next: TKnoten; Inhalt: RDaten; end; |
Dann habe ich eine Unit erstellt mit folgenden Proceduren/Funktionen
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| constructor Create; overload; constructor Create(const Benutzername, Passwort: String); overload; procedure Erweitere(const Benutzername, Passwort: String); function vorhanden(const Benutzername: String): Boolean; function Finde(const Benutzername: String): PAccount; function loesche(const Benutzername: String): Boolean; destructor loeschen; function AenderePasswort(const Benutzername, NeuesPasswort: String): Boolean; function Kontrolliere: Boolean; |
der Fehler liegt in der function loesche(const Benutzername: String): Boolean; bei dem Punkt
Ende := Ende^.before; //funktioniert nicht
also so geschrieben:
Ende := @Ende^.before^;
es funktioniert zwar, aber es gibt nun fehler! (zugriffsverletzung)
Zur Vereinfachung habe ich anstatt nur den Quelltext der Unit zu zeigen direkt ein Testprogramm mitgeliefert, dass alle Funktionen einzeln testet!
_________________ Sucht "neueres" Delphi
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
|
|
mandras
      
Beiträge: 432
Erhaltene Danke: 107
Win 10
Delphi 6 Prof, Delphi 10.4 Prof
|
Verfasst: Fr 10.05.13 01:20
IhopeonlyReader hat folgendes geschrieben : | es funktioniert zwar, aber es gibt nun fehler! (zugriffsverletzung) |
Ah ja.
Ich lese hier fleißig, antworte aber nur manchmal.
Was mir hier fehlt ist eine mit vernünftigen Aufwand nachvollziehbare Fehlerbeschreibung.
Moderiert von Narses: Zitat mit Tags garniert.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 10.05.13 01:50
Moin!
Mal generell: Objekt-Variablen sind bereits Pointer, du kannst also den Dereferenzierungsoperator (das Caret) weglassen!
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Tranx
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Fr 10.05.13 04:36
Warum verarbeitest Du die Liste nicht in dem Objekt, das dafür zuständig ist: TList.
Die einzelnen Einträge der TList (Zeiger) sind dann Objekte Deines Typs. Dann sollte das wandern innerhalb der Liste, das Löschen einzelner Einträge oder gar der gesamten Liste nicht schwer sein. Und Du benötigst für das einzelne Objekt nicht die Eigenschaften "before" und "next", die zudem unlogisch sind, denn ein Objekt einer beliebigen Liste hat nun mal keinen einmal definierten und damit festgelegten Vorgänger und Nachfolger, weil durch Einfügen und Löschen diese sich jederzeit ändern können. Also macht es keinen Sinn, die Einträge auf der Objektebene zu definieren. Bei meinen Objekten (Analysenergebnisse von Materialanalysen) klappt diese Vorgehensweise hervorragend. Ich habe nie Probleme mit Zugriffsverletzungen. Und in diesem Fall ist ein Objekt sogar zweischichtig:
Analysengrunddaten (Auftragsnummer, Datum, Messprogramm ...)
Zusammensetzung (Element, Konzentration, Sollwerte, ...)
Die Daten werden aus Datenbanken in die Liste gelesen und dort nach Bearbeitung wieder abgespeichert.
Die Vorgehensweise mit TList solltest Du mal überlegen.
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 10.05.13 13:16
Moin!
Tranx hat folgendes geschrieben : | Warum verarbeitest Du die Liste nicht in dem Objekt, das dafür zuständig ist: TList. |
Weil es u.U. nicht die Aufgabe ist?  Eine TList (und wenn schon, dann für Objekte eine TObjectList  ) ist nun mal ein Array, eine lineare Liste ist aber konzeptionell etwas ganz anderes. Das sollte man (zumindest für den akademischen Zweck) nicht ausser acht lassen.
IhopeonlyReader hat folgendes geschrieben : | nur ich arbeite auch mit einem Zeiger nach hinten! |
Dann such halt nach "doppelt verketteter Liste".  Gibt sicher auch was zu.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Blup
      
Beiträge: 174
Erhaltene Danke: 43
|
Verfasst: Fr 10.05.13 14:28
Ich hab mal bischen drin rumgedoktert, mit ein par Anmerkungen.
Einloggen, um Attachments anzusehen!
|
|
IhopeonlyReader 
      
Beiträge: 600
Erhaltene Danke: 23
Delphi 7 PE
|
Verfasst: Sa 11.05.13 16:17
Danke
Es ist natürlich jetzt auch logisch, warum es einen Fehler gibt ! einen zeiger auf einen zeiger ist nicht gut ...
_________________ Sucht "neueres" Delphi
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
|
|