Autor Beitrag
Hugo343
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 114
Erhaltene Danke: 2

Windows 7
Turbo Delphi, Dev C++
BeitragVerfasst: Sa 02.10.10 14:53 
Auf dem Weg ein Snakespiel zu proggen, mit einer "Pointer-Liste" für die Linien bekomme ich einen Zugriffsfehler. Leider bin ich ein wenig verwundert da ich mich an ein älteres Projekt gehalten habe das funktionierte... (Pointer kann ich noch nich dolle). Zur Veranschaulichung aber hier besser der Quelltext:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
//(...)
type

  TDot = record
    X,Y:extended;
  end;

  PLine = ^TLine;

  TLine = class
    public
    A,B:TDot;
    Next:PLine;
    procedure SetAB(ax,ay,bx,by:extended);
  end;

  procedure LineListSetup;
  procedure LineListDestroy;
  procedure AddNewLine(ax,ay,bx,by:extended);
//(...)

var

  LineNewPointer,LineStartPointer:PLine;

implementation

procedure LineListSetup;
begin
  LineStartPointer:=NIL;
end;

procedure LineListDestroy;
begin
  LineStartPointer.Free;
  LineNewPointer.Free;
end;

procedure AddNewLine(ax,ay,bx,by:extended);
begin
  New(LineNewPointer);

// ### Bei diesen beiden Zeilen bekomme ich die Fehlermeldung
  LineNewPointer.SetAB(ax,ay,bx,by);
  LineNewPointer^.Next:=LineStartPointer;
// ###

  LineStartPointer:=LineNewPointer;
end;

//(...)

procedure TLine.SetAB(ax: Extended; ay: Extended; bx: Extended; by: Extended);
begin
  A.X:=ax;
  A.Y:=ay;
  B.X:=bx;
  B.Y:=by;
end;


Ich greife auf diese eingebundene Unit vom Projekt aus so zu:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
//(...)

procedure TForm1.Button1Click(Sender: TObject);
begin
  ax:=strtofloat(edit1.text);
  ay:=strtofloat(edit2.text);
  bx:=strtofloat(edit3.text);
  by:=strtofloat(edit4.text);

// Hier ist die Funktion:
  AddNewLine(ax,ay,bx,by);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  LineListSetup;
end;


Wär nett wenn da einer was wüsste, bin jedem dankbar.
MfG, Hugo343
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Sa 02.10.10 14:58 
du verwendest statt eines records eine Klasse. Also musst du auch eine instanz davon erstellen. Das fehlt
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 02.10.10 15:06 
Ein Objekt einer Klasse erzeugt man mit dem Konstruktor der Klasse und nicht mit New. Desweiteren, warum sind die Prozeduren procedure LineListSetup; procedure LineListDestroy; procedure AddNewLine(ax,ay,bx,by:extended); keine Metghoden der Klasse?
Hugo343 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 114
Erhaltene Danke: 2

Windows 7
Turbo Delphi, Dev C++
BeitragVerfasst: Sa 02.10.10 15:44 
Wie genau mach ich das ich hab doch schon meine beiden Pointer (LineNewPointer,LineStartPointer:PLine;). Ich weiß das klingt total dumm aber ich hab damit ein echtes problem...
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Sa 02.10.10 15:49 
1. Entscheiden, ob es eine einfach Liste, oder eine Liste von objekten werden soll. Dein Ansatz sieht nach einer Liste ohne Objekte aus. Also: TLine als record ohne methode definieren
2. ListNewPointer sollte eine lokale Variable werden, da nur dort gebraucht.
3. Tut oder Code angucken bezüglich verketteten Listen in Delphi. Ist das einfachste ;)
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 02.10.10 15:56 
Du machst es dir unnötig schwer. Überlege, ob du mit Records und rein prozedural arbeiten willst oder mit Klassen und Objekten.