Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Konstante oder Typenbezeichner erwartet Typ in ext. Units
marvin190 - Sa 02.05.15 19:21
Titel: Konstante oder Typenbezeichner erwartet Typ in ext. Units
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:
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 end;
var FormMieterverwaltung: TFormMieterverwaltung;
implementation
uses [...];
{$R *.dfm}
[...]
procedure TFormMieterverwaltung.UpdateTree; var [...] Häuserliste: Häuser; begin [...] end;
end. |
uTypen.pas
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 - Sa 02.05.15 19:47
Anstatt dem "ä" bitte mal "ae" ausprobieren
marvin190 - So 03.05.15 08:56
Das hat leider keinen Effekt.
jaenicke - 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 - 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:
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; Wohneinheitenliste: Wohneinheiten; Mieterliste: Mietparteien; i:Integer; begin 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:
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 - 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 - 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: ;-)
http://edn.embarcadero.com/article/10280 (englisch)
http://www.delphi-treff.de/object-pascal/styleguide/ (deutsch)
marvin190 - So 03.05.15 11:18
Ich bin ja vielleicht blind -.- Natürlich sollte ich die Bezeichnung nicht zweimal verwenden ...
Danke an alle :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!