Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Deklaration von Array?


Yacoon - Do 11.03.04 21:46
Titel: Deklaration von Array?
Hi zusammen,

ich versuche gerade einen Array zu deklarieren, habe jedoch einige Probleme :-)
Kann mir mal bitte einer sagen, was ich falsch mache?


Delphi-Quelltext
1:
aryInformationen : array[0..14of Integer := (0,32,64,96,128,160,192,224,256,288,320,352,384,416,448);                    


Moderiert von user profile iconPeter Lustig: Topic verschoben


catweasel - Do 11.03.04 21:50

Was wird denn als Fehler angezeigt ?


Yacoon - Do 11.03.04 21:52

';' erwartet aber :=' gefunden.
Oder kann es sein, das dies keine gültige Deklaration mehr in Delphi 8 ist?


ErnestoChe - Do 11.03.04 21:53

Hallo,

der Doppelpunkt bei der Initialisierung muss weg.

MFG

- Ernesto .


Yacoon - Do 11.03.04 21:54

Daran hab eich auch schon gedacht, nur leider ist das auch nicht das Problem.
Wenn ich den Doppelpunkt weg nehm und nur noch das = Zeichen habe, bekomme ich folgende Fehlermeldung:
';' erwartet aber '=' gefunden


Anonymous - Do 11.03.04 21:58

So kannst du nur Konstanten delarieren,


ErnestoChe - Do 11.03.04 21:59

Hallo,

dann zeig mal mehr Code. Du musst dann das array auch als const deklarieren.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Button1Click(Sender: TObject);
const
  aryInformationen : array[0..14of Integer = (0,32,64,96,128,160,192,224,256,288,320,352,384,416,448);
begin
  //.................
end;


MFG

- Ernesto -


Anfänger - Do 11.03.04 22:00
Titel: Re: Deklaration von Array?
Ich denke du wolltest deinen Array als Konstante haben. In dem Fall musst du noch "const" davor setzen und aus dem ":=" ein "=" machen.


Yacoon - Do 11.03.04 22:01

ok, aber geht das mit Variablen echt nich?


Anonymous - Do 11.03.04 22:04

Mit globalen Variablen sollte es schon gehen. Welche Delphiversion hast du denn?


Yacoon - Do 11.03.04 22:06

Man stolpert doch immer über so kleine dinge.
Also gehn tut es immer noch nicht.

Delphi-Quelltext
1:
2:
3:
4:
5:
type
  MyClass = class (TObject)
    private
      const aryDaten = array[0..14of Integer = (0,32,64,96,128,160,192,224,256,288,320,352,384,416,448);
  end;


So, also ich denke verstehen tut jeder was ich möchte.
Es geht aber nicht, bekomme jetzt vom Compiler die Meldung "Ausdruck erwartet, aber ARRAY gefunden"
Einer ne IDee?


Anfänger - Do 11.03.04 22:06

Doch kannst du, nur kommt dann Var statt const davor.


Yacoon - Do 11.03.04 22:07

Verwende D8 und schreibe grad eine KLasse für .NET, aber bekomme immer diese Fehler.
Deswegen habe ich den Thread auch im .NET Forum erstellt.


Yacoon - Do 11.03.04 22:08

Nein, mit var davor bin ich wieder bei dem selben Fehler wie ein paar Beiträge weiter oben


Christian S. - Do 11.03.04 22:09

Zitat:
Deswegen habe ich den Thread auch im .NET Forum erstellt.

Ist aber kein .NET-spezifisches Problem, sondern hängt mit Delphi-Language zusammen. Und egal welche Version von Delphi-Language, das gehört hier herein.


Yacoon - Do 11.03.04 22:13

Danke für deine zurechtweisung, wollte ja niemanden auf den Fuß treten.
Da es aber Dinge gibt, die in D8 nun mal anders sind als in den Vorgängerversionen und ich nun mal davon ausgegangen bin, dass das vielleicht auch an der Version liegt, habe ich es ins .Net Forum geschrieben.
Aber is ja nit so wild :-)


Christian S. - Do 11.03.04 22:23

Sorry, wenn das so rüber gekommen ist, aber eine Zurechtweisung sollte es nicht sein. Mehr eine Erklärung.

Aber zum Problem:
Ich habe es unter D7 und D8 ausprobiert: bei globaler Deklaration geht es so:

Delphi-Quelltext
1:
2:
VAR
  aryDaten : array[0..14of Integer = (0,32,64,96,128,160,192,224,256,288,320,352,384,416,448);


Yacoon - Do 11.03.04 22:25

Was genau meinst du mit globaler definition?
Wäre halt schon toll, wenn die Variable Bestandteil der Klasse wäre, und nach ausenhin nichzt sichtbar wäre.


Christian S. - Do 11.03.04 22:42

Komisch ... das scheint nicht zu gehen. :? Oder habe ich gerade ein Brett vorm Kopf?


Yacoon - Do 11.03.04 22:43

Gut, dann bin ich nicht der einzigste der glaubt zu spinnen.


Anfänger - Do 11.03.04 23:01

Ich habe zwar keine Lösung, da ich probleme mit der Zugriffsverletzung habe, aber ich denke es dürfte weiter helfen.

Das Problem ist aber noch, dass ich an die Variable nicht heran komme.

Übrigens ich habe mir erlaubt eine Forschleife zu verwenden um die Werte zuzuweisen, was natürlich bei anderen Werten nicht funktioniert.


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:
type
  MyClass = class (TObject)
    aryDaten : array[0..14of Integer;
    procedure MyClassCreate;
  end;

var
  Form1: TForm1;
  MyClass1:MyClass;

implementation

{$R *.DFM}

procedure MyClass.MyClassCreate;
var I:Integer;
begin
  For I:=0 to 14 do
  MyClass1.aryDaten[I]:=32*I;

  Form1.Canvas.TextOut(10,10,IntToStr(MyClass1.aryDaten[0])); //zum Testen ersten Wert auf der Form1 darstellen
end;

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


Meinen Fehler weiß bestimmt jemand. :wink:


ErnestoChe - Do 11.03.04 23:32

Hallo,

@Anfänger

Anfänger hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure MyClass.MyClassCreate;
var I:Integer;
begin
  For I:=0 to 14 do
  MyClass1.aryDaten[I]:=32*I;

  Form1.Canvas.TextOut(10,10,IntToStr(MyClass1.aryDaten[0])); //zum Testen ersten Wert auf der Form1 darstellen
end;


Wieso arbeitest du innerhalb einer Methode mit dem globalen Objekt MyClass1. Das ist nicht Sinn einer Klasse. So sollte es aussehen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure MyClass.MyClassCreate;
var I:Integer;
begin
  For I:=0 to 14 do
    aryDaten[I]:=32*I;

  Form1.Canvas.TextOut(10,10,IntToStr(aryDaten[0])); //zum Testen ersten Wert auf der Form1 darstellen
end;


Der Grund für deine Zugriffsverletzung ist wahrscheinlich, dass du deinem Objekt MyClass1 vorher keine Referenz zuweist:


Delphi-Quelltext
1:
MyClass1 := MyClass.Create;                    


MFG

- Ernesto -