Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   '=' erwartet, aber ':' gefunden (https://www.delphipraxis.net/42507-%3D-erwartet-aber-gefunden.html)

steppo 20. Mär 2005 02:42


'=' erwartet, aber ':' gefunden
 
Kann mir jemand sagen, warum ich bei folgender Konstellation diese Fehlermeldung erhalte.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, ComCtrls;

type
  TBuchstabe = (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u,
    v, w, x, y, z, ae, oe, ue);


  TBuchstaben: array[TBuchstabe] of string = 'a', 'b', 'c', 'd', 'e', 'f', 'g',//In dieser Zeile Tritt der Fehler auf.
    'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u',
    'v', 'w', 'x', 'y', 'z', 'ae', 'oe', 'ue');

type
  TMatrix = record
    Buchstabe: TBuchstaben;
    Binaer: integer;
  end;
Fehlermeldung:
[Fehler] Unit1.pas(14): '=' erwartet, aber ':' gefunden

Ich möchte später das Record Matrix mit werten füllen.

Christian Seehase 20. Mär 2005 03:20

Re: '=' erwartet, aber ':' gefunden
 
Moin Steppo,

hier
Delphi-Quellcode:
TBuchstaben: array[TBuchstabe] of string ....
muss noch ein const davor.
Das ist ja kein Typ mehr.

PattyPur 20. Mär 2005 07:19

Re: '=' erwartet, aber ':' gefunden
 
Ausserdem hast du vergessen die Klammer aufzumachen hinter dem =

moritz 20. Mär 2005 08:20

Re: '=' erwartet, aber ':' gefunden
 
Delphi-Quellcode:
  TBuchstaben: array[TBuchstabe] of string = 'a', 'b', 'c', 'd', 'e', 'f', 'g',//In dieser Zeile Tritt der Fehler auf.
    'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u',
    'v', 'w', 'x', 'y', 'z', 'ae', 'oe', 'ue');
Abgesehen davon muss, soweit ich weiß, in den eckigen Klammern nach dem Array die Anzahl der Elemente stehen, und nicht, von welchem Typ sie sein sollen. Sonst brauchst du ein set of.... Oder? :gruebel:

mirage228 20. Mär 2005 08:28

Re: '=' erwartet, aber ':' gefunden
 
Hi,

wenn Deine Strings immer den Enum-Namen entsprechen (scheint hier der Fall zu sein), kannst Du auch schreiben:

Delphi-Quellcode:
uses  
  TypInfo;

// ...
var
  s: string;
  b: TBuchstabe;
begin
  b := u; // z.B.
  s := GetEnumName(TypeInfo(TBuchstabe), Integer(b)); // gibt den String "u" zurück
mfG
mirage228

steppo 20. Mär 2005 11:30

Re: '=' erwartet, aber ':' gefunden
 
Danke Leute für die schnelle Antwort.

O.K

Werde das Problem genauer beschreiben.

TBuchstabe ist ein Aufzählungstyp.

Delphi-Quellcode:
type
  TBuchstabe = (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u,
    v, w, x, y, z, ae, oe, ue);
TBuchstaben ist ein array dieses vorher genannten Aufzählungstypen.

Delphi-Quellcode:
TBuchstaben: array[TBuchstabe] of string = ('a', 'b', 'c', 'd', 'e', 'f', 'g',
    'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u',
    'v', 'w', 'x', 'y', 'z', 'ae', 'oe', 'ue');
Das heißt, das sich der Berich in diesem Array (welches sonst mit [0..28]) definiert würde) von a bis ue erstreckt.

Diese Konstrukt brauche ich nachher, um die Position im Array zu bestimmen.
Das heißt in dem Record werden zwei Werte gespeichert.

Delphi-Quellcode:
type
  TMatrix = record
    Buchstabe: TBuchstaben;
    Binaer: integer;
  end;
1. Ein Wert
2. Ein String ermittelt aus der Position des Aufzählungstypen.

Das ganze soll nachher so aussehen.

In dem nachher, in der Procedur entstehenden Array, werden die Werte:
TMatrxi = Buchstabe:a,Binaer:1;Buchstabe:b,Binaer:2,usw

Hoffe ich konnte das ganze jetzt verdeutlichen.

Den Aufzählungstypen brauche ich lediglich, um die Position im Array von Typ string zu bestimmen.

S - tefano 20. Mär 2005 11:53

Re: '=' erwartet, aber ':' gefunden
 
Sehe ich das jetzt richtig, dass du dadurch die Nummer des jeweiligen Buchstaben im Alphabet herausfinden willst?
Einfacher währe eigentlich, über den ASCII-Code zu gehen.
Wenn ich mich recht entsinne, bekommst du zum Beispiel mit
Delphi-Quellcode:
ord('A')
die Zahl 65 zurück. Nehme das Ergebnis also Minus 64 und du hast die Nummer des Buchstaben im Alphabet; Kleinbuchstaben solltest du vorher UpperCase setzen, damit du nicht verschiedene Startwerte subtrahieren musst.

Was dein Konstrukt angeht, so kann ich nur die bereits gegebenen Hinweise nennen:
In die Eckige Klammer hinter dem Array-Bezeichner kannst du keinen Typennamen schreiben, da muss die Anzahl der Elemente hin. Desweiteren hast du vor der Aufzählung der Strings die öffnende Klammer vergessen, und ob die runde Klammer "(" dafür die richtige ist, würde ich bezweifeln. Müsste eigentlich "[" sein, oder "{"...eins von beiden jedenfalls ;-)

Bis dann,

S - tefano

[Edit]
Oder lass die eckige Klammer hinter dem Array-Bezeichner ganz weg, wenn du schon eine konstante vordefinierte Menge von Elementen hast, geht das glaube ich auch automatisch.
[/Edit]

malo 20. Mär 2005 11:58

Re: '=' erwartet, aber ':' gefunden
 
Zitat:

Zitat von S - tefano
und ob die runde Klammer "(" dafür die richtige ist, würde ich bezweifeln. Müsste eigentlich "[" sein, oder "{"...eins von beiden jedenfalls ;-)

Die geschweifte Klammer ( "{...}" ) ist es ganz sicher nicht, da diese in Delphi (Pascal) als Kommentar interpretiert wird ;)

S - tefano 20. Mär 2005 12:01

Re: '=' erwartet, aber ':' gefunden
 
...hups... :oops:
Achja, zu den Umlauten noch:
Die ord-Methode wird dir da zwar einen Wert zurückgeben, da musst du dann aber soweit ich weiß eine Zahl >65 abziehen, weil Umlaute ja so eine Art regionales Sonderzeichen sind und nicht im "normalen" Alphabet vorkommen.

steppo 20. Mär 2005 12:07

Re: '=' erwartet, aber ':' gefunden
 
Die oeffnede Klammer ist vorhanden. Habe sie nur vergessen zu Kopieren.

Habe das ganze schonmal in einer Unit verwendet, um Feiertage zu bestimmen. Warumes jedoch jetzt nicht funktioniert ist mir ein Rätsel.

Wie gesagt, es wird laut kompilier eine = anstatt eines Doppelpunktes erwartet.

Die Muhkuh 20. Mär 2005 12:09

Re: '=' erwartet, aber ':' gefunden
 
Hi,

schonmal so versucht:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, ComCtrls;

type
  TBuchstabe = (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u,
    v, w, x, y, z, ae, oe, ue);

  TMatrix = record
    Buchstabe: TBuchstaben;
    Binaer: integer;
  end;

const
  TBuchstaben: array[TBuchstabe] of string = 'a', 'b', 'c', 'd', 'e', 'f', 'g',//In dieser Zeile Tritt der Fehler auf.
    'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u',
    'v', 'w', 'x', 'y', 'z', 'ae', 'oe', 'ue');

steppo 20. Mär 2005 12:13

Re: '=' erwartet, aber ':' gefunden
 
Hi Manu,

deine Reihenfolge hätte zur folge, dass TBuchstaben nicht definiert sei, da es erts nach dem Record definiert ist.

Die Muhkuh 20. Mär 2005 12:14

Re: '=' erwartet, aber ':' gefunden
 
Hi,

sorry, hab bloß bisschen geordnet :-)

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, ComCtrls;

type
  TBuchstabe = (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u,
    v, w, x, y, z, ae, oe, ue);

const
  TBuchstaben: array[TBuchstabe] of string = 'a', 'b', 'c', 'd', 'e', 'f', 'g',//In dieser Zeile Tritt der Fehler auf.
    'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u',
    'v', 'w', 'x', 'y', 'z', 'ae', 'oe', 'ue');

type
  TMatrix = record
    Buchstabe: TBuchstaben;
    Binaer: integer;
  end;

steppo 20. Mär 2005 12:18

Re: '=' erwartet, aber ':' gefunden
 
Hab ich auch versucht.

fehlermeldung:
[Fehler] Unit1.pas(20): Konstante oder Typenbezeichner erwartet

DP-Maintenance 20. Mär 2005 12:21

DP-Maintenance
 
Dieses Thema wurde von "Sharky" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
So langsam kann der Thread mal in die richte Sparte wandern.

Chewie 20. Mär 2005 12:22

Re: '=' erwartet, aber ':' gefunden
 
Das Problem ist doch schlicht und ergreifen, dass ihr hier ein Typdeklaration mit einer Konstantendefinition vermischt, was die Sprache nicht unterstützt.

steppo 20. Mär 2005 12:49

Re: '=' erwartet, aber ':' gefunden
 
Ok.

Wie ssieht die Lösung aus?

stefan2005 20. Mär 2005 13:02

Re: '=' erwartet, aber ':' gefunden
 
hi,
muss es nicht so heißen:
Delphi-Quellcode:
const TBuchstaben: array[0..TBuchstabe] of string = ...
?

cu,
stefan2005

steppo 20. Mär 2005 13:04

Re: '=' erwartet, aber ':' gefunden
 
Nein. Die menge ist durch TBuchstabe definiert.

Binärbaum 20. Mär 2005 13:24

Re: '=' erwartet, aber ':' gefunden
 
Das problem liegt in folgender Typdeklaration:
Delphi-Quellcode:
type
  TMatrix = record
    Buchstabe: TBuchstaben;
    Binaer: integer;
  end;
Dabei ist TBuchstaben KEIN Typ, sondern nur der Bezeichner für eine Konstante.
Delphi-Quellcode:
const
  TBuchstaben: array[TBuchstabe] of string = ('a', 'b', 'c', 'd', 'e', 'f', 'g',
    'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u',
    'v', 'w', 'x', 'y', 'z', 'ae', 'oe', 'ue');
Bei Typdeklarationen wird hinter dem ":" aber immer ein Typ erwartet, TBuchstaben ist aber nur eine Konstante.
Außerdem würde ich vorschlagen, den Konstantenarray TBuchstaben in Buchstaben umzubenennen, dann kommt man auch nicht zu der falschen Annahme, TBuchstaben könnte ein Typ sein.

MfG
Binärbaum

scp 20. Mär 2005 13:28

Re: '=' erwartet, aber ':' gefunden
 
Das Problem ist: Du kannst bei einer Typendeklaration keine Wertezuweisung durchführen, erst wenn du eine Variable hast, geht das.
Delphi-Quellcode:
type
  TBuchstabe = (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u,
    v, w, x, y, z, ae, oe, ue);

  TBuchstabenArray = array[TBuchstabe] of string;

  TMatrix = record
    Buchstabe: TBuchstabenArray;
    Binaer: integer;
  end;
Hier zwei Möglichkeiten:
Delphi-Quellcode:
const
  cBuchstaben: TBuchstabenArray = ('a', 'b', 'c', 'd', 'e', 'f', 'g',
    'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u',
    'v', 'w', 'x', 'y', 'z', 'ae', 'oe', 'ue');

var
  AMatrix: TMatrix;

procedure Irgendwas;
begin
  AMatrix.Buchstabe := cBuchstaben;
end;
oder:

Delphi-Quellcode:
var
  AMatrix: TMatrix = (Buchstabe: ('a', 'b', 'c', 'd', 'e', 'f', 'g',
    'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u',
    'v', 'w', 'x', 'y', 'z', 'ae', 'oe', 'ue'));
Letzteres geht nur bei globalen Variablen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:13 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