Guten Abend,
meine Programmierkenntnisse aus dem Studium sind lange her, jetzt wollte
ich mit Lazarus mal versuchen zu reaktivieren, was noch da ist, und
scheitere relativ schnell:
Ich möchte mir einen eigenen Sudoku-Solver bauen. Klappt grundsätzlich
rein prozedural ganz gut, aber selbst in diesem Miniprojekt wirds doch
schnell unübersichtlich. Also die Idee, nochmal neu mit OOP aufzusetzen.
Eine Klasse TSudoku geschaffen, und im Hauptprogramm eine entsprechende
Variable angelegt (var meinSudoku: TSudoku;).
Dann meinSudoku.Create() aufgerufen, und anschließend
meinSudoku.Ausgeben(). Bei letzterem wird die Fehlermeldung "External:
SIGSEGV" ausgelöst.
Ich habe die vage Vermutung, dass der Zugriff auf das interne Array
innerhalb der Klasse nicht zulässig ist, was aber nicht abhängt von der
Sichtbarkeit nach außen (private vs. public). Ist das Array hier mit
static zu deklarieren? Falls ja, wie?/Ich erhalte immer die Meldung, an
dieser und jener Stelle sei das Schlüsselwort static nicht zulässig.
Oder ist die Ursache für die Fehlermeldung eine andere?
Die Fehlermeldung ist unabhängig vom "self.", write an sich
funktioniert.
Vielen Dank!
1 | unit USudoku;
|
2 |
|
3 | {$mode objfpc}{$H+}
|
4 |
|
5 | interface
|
6 |
|
7 | uses
|
8 | Classes, SysUtils,Crt;
|
9 |
|
10 | type
|
11 | TSudoku = class
|
12 | private
|
13 | sudokumatrix: array[1..9] of array[1..9] of String;
|
14 | public
|
15 | procedure Ausgeben();
|
16 | constructor Create();
|
17 | end;
|
18 |
|
19 | implementation
|
20 |
|
21 | constructor TSudoku.Create();
|
22 | var
|
23 | x,y: integer;
|
24 | begin
|
25 | for x:=1 to 9 do begin
|
26 | for y:=1 to 9 do begin
|
27 | sudokumatrix[x][y]:='123456789';
|
28 | end;
|
29 | end;
|
30 | end;
|
31 |
|
32 | procedure TSudoku.Ausgeben();
|
33 | var
|
34 | x,y: integer;
|
35 | inhalt: String;
|
36 | begin
|
37 | for x:=1 to 9 do begin
|
38 | for y:=1 to 9 do begin
|
39 | // die folgende Zeile löst SIGSEGV aus
|
40 | Write(self.sudokumatrix[x][y]:10);
|
41 | end;
|
42 | writeln;
|
43 | end;
|
44 | end;
|
45 | end.
|