Mit Delphi 2010... Ich habe eine Reihe von binären Eigenschaften, die ich zusammen gruppieren möchte. Ich habe sie als solche definiert...
type
TTableAttributeType = (
tabROOT = 1,
tabONLINE = 2,
tabPARTITIONED = 3,
tabCOMPRESSED = 4,
);
// Make a set of of the Table Attribute types...
type
TTableAttrSet = Set of TTableAttributeType;
In meiner Unit MAIN.PAS kann ich eine Variable vom Typ TTableAttrSet erstellen. Eine andere Unit, UTILS.PAS, muss ebenfalls den Typ TTableAttrSet verstehen. Das wird von den USES-Klauseln erledigt...
Main USES Util... Util USES Main (Die 2. verwendet Klauseln, unter Implementierung Abschnitt, so dass ich nicht bekommen zirkuläre Referenz Probleme....
So weit, so gut. Mein Problem ist, dass ich eine var-Variable vom Typ TTableAttrSet FROM main an Utils übergeben muss.
In main.pas
procedure TForm1.Button1Click(Sender: TObject);
var
TabAttr : TTableAttrSet;
begin
TestAttr (TabAttr);
end;
und in UTILS.PAS, habe ich
procedure TestAttr(var Attr: TTableAttrSet);
begin
Attr := [tabROOT, tabCOMPRESSED];
end;
Wenn ich dies versuche, stoße ich auf mehrere Probleme... Problem 1). Wenn ich meine Prozedurdefinition am Anfang von utils.pas definiere,
procedure TestAttr(var Attr: TTableAttrSet);
Ich erhalte die Fehlermeldung, dass TTableAttrSet ein nicht deklarierter Bezeichner ist. Dies ist sinnvoll, da die Definition in Main.pas steht und das "uses Main.pas" NACH meinen Prozedurdefinitionen steht. Wie kann ich dieses Problem umgehen? Im Moment habe ich die TTableAttrSet-Typdefinition oben in der Datei Utils.pas sowie in Main.pas dupliziert, aber das scheint nicht der richtige Weg zu sein.
Problem 2). Das größere Problem, auf das ich stoße, ist ein Kompilierfehler. in der aufrufenden Zeile in Main.pas
TestAttr(TabAttr);
Ich erhalte die Fehlermeldung 'Typen der aktuellen und formalen Parameter müssen identisch sein'. Meines Wissens sind sie identisch. Worüber beschwert sich der Compiler?