Autor Beitrag
marvin190
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 55

Win XP, SuSe Linux 10.1
Delphi 3/5/2005 Personal; C++ Builder 6
BeitragVerfasst: Sa 02.05.15 19:21 
Hallo zusammen,

ich bekomme vom Compiler einen E2007 Konstante oder Typenbezeichner erwartet Fehler. Leider kann ich mir keinen Reim darauf machen wieso, da der Name dort durchaus ein Typenbezeichner ist und die Unit, die diesen beinhaltet, im Interface Teil bei Uses steht. Mein Code:

uMieterverwaltung:

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:
unit uMieterverwaltung;

interface

uses
  [viele Andere], uTypen;

type
  TFormMieterverwaltung = class(TForm)
    [...]
  private
    AktuellerMieter: Mietpartei;
    procedure UpdateTree;
    [...]
  public
    { Public-Deklarationen }
  end;

var
  FormMieterverwaltung: TFormMieterverwaltung;

implementation

uses
  [...];

{$R *.dfm}

[...]

procedure TFormMieterverwaltung.UpdateTree;
var
  [...]
  Häuserliste: Häuser;
begin
  [...]
end;

end.


uTypen.pas

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
unit uTypen;

interface

type
  Haus = record
  [...]
 end;

  Häuser = array of Haus;

  Mietpartei = record
  [...]
  end;

  [...]

implementation

end.


Was mache ich falsch? Die uTypen in das Implementation-Uses verschieben geht nicht, weil eine Methode ebenfalls einen dort definierten Typ zurückgibt.

Danke für Eure Hilfe!
platzwart
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: Sa 02.05.15 19:47 
Anstatt dem "ä" bitte mal "ae" ausprobieren

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
marvin190 Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 55

Win XP, SuSe Linux 10.1
Delphi 3/5/2005 Personal; C++ Builder 6
BeitragVerfasst: So 03.05.15 08:56 
Das hat leider keinen Effekt.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 03.05.15 09:10 
Kannst du vielleicht ein wenig mehr von dem Code posten?

Zumindest ein paar Zeilen vor und nach dem Fehler und die genaue Position, die nach dem Kompilieren als Fehler markiert wird, oder einen Screenshot von dem markierten Fehler.
marvin190 Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 55

Win XP, SuSe Linux 10.1
Delphi 3/5/2005 Personal; C++ Builder 6
BeitragVerfasst: So 03.05.15 09:44 
Na klar, gar kein Problem, ich wollte es nur übersichtlich halten :)

Hier ist der Teil der uMieterverwaltung.pas, in der der Fehler auftritt:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TFormMieterverwaltung.UpdateTree;
var
  Haus: TPair<Integer, TTreeNode>;
  Wohneinheiten: TDictionary<Integer, TTreeNode>;
  Wohneinheit: TPair<Integer, TTreeNode>;
  Häuserliste: Häuser;   // FEHLER HIER
  Wohneinheitenliste: Wohneinheiten;
  Mieterliste: Mietparteien;
  i:Integer;
begin
  // Tree, Hashmaps löschen, Init
  Tree.Items.Clear;
  [...]


Derselbe Fehler tritt übrigens auch eine Zeile später mit dem Typ "Wohneinheiten" auf.

Und hier die beiden Records, um die es geht, aus der uTypen.pas:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
  [...]
  Haus = record
    Haus_ID: Integer;                  
    Name: String;               
    AnschriftZeile1: String;       
    AnschriftZeile2: String;       
  end;

  Häuser = array of Haus;            

  Wohneinheit = record
    Wohneinheit_ID: Integer;       
    Haus_ID: Integer;                 
    Bezeichnung: String;     
    Wohnfläche: Integer;            
  end;

  Wohneinheiten = array of Wohneinheit;
  [...]
icho2099
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 101
Erhaltene Danke: 12

WIN XP, WIN 7, WIN 10
Delphi 6 Prof, Delphi 2005, FPC
BeitragVerfasst: So 03.05.15 09:57 
Moin
Haus und Wohneinheit hast du erst als Type und dann nochmal als Variable,
Da fällt es dem Compiler schwer zu unterscheiden.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 03.05.15 10:30 
Deshalb ist es in Delphi auch schlechter Programmierstil Typen wie Klassen nicht mit T anfangen zu lassen. Sprich THaus, THäuser, ...
Dann passiert das auch nicht so leicht.

// EDIT:
Private Felder in Klassen sollten zum Beispiel mit F anfangen (für deine Records gilt das also nicht).

Für die Schreibweise von Delphi-Quelltext gibt es hier auch einen Styleguide, falls es dich interessiert: ;-)
edn.embarcadero.com/article/10280 (englisch)
www.delphi-treff.de/...t-pascal/styleguide/ (deutsch)
marvin190 Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 55

Win XP, SuSe Linux 10.1
Delphi 3/5/2005 Personal; C++ Builder 6
BeitragVerfasst: So 03.05.15 11:18 
Ich bin ja vielleicht blind -.- Natürlich sollte ich die Bezeichnung nicht zweimal verwenden ...

Danke an alle :)