[SE] duplicate fingerprint
Posted: Sat Aug 26, 2006 6:06 pm
Bij het compileren geeft Oberon de voor mij tot nu toe onbekende foutmelding "280 duplicate fingerprint"
Dit is tevens de enige plaats waar errors gedefinieerd worden. Iemand een idee waarom alleen deze 3 lijnen worden gemeld of wat de fout will voorstellen? Google geeft bitter weinig informatie (lees: geen).
EDIT:
De reden waarom ik het op deze manier wou heeft veel de maken met overerving van basisprocedures die andere basisprocedures oproepen die ook overgeervd zijn. Even een tekening:

De groene pijlen geven de oproepen aan en de rode de returnvalues. Stel nu dat extended ProcB een error geeft. Deze wordt dan aan base ProcB gegeven, die op zijn beurt een fout geeft omdat de error niet van een type is dat hij kent. (de code hierboven moest dit oplossen, maar gaf een duplicat fingerprint). Door extended ProcA gewoon opnieuw te maken (dus zonder overerving) is het probleem dus vermeden.
De (nu minder dringende) vraag blijft echter nog altijd:
Wat zijn duplicate fingerprints en hoe geraak je er vanaf?
Code: Select all
InitError* = POINTER TO InitErrorR;
InitErrorR = RECORD (Toestel.InitErrorR) END;
(*duplicate*) NameError* = POINTER TO NameErrorR;
NameErrorR = RECORD (Toestel.NameErrorR) END;
XError* = POINTER TO XErrorR;
XErrorR = RECORD (Toestel.XErrorR) END;
(*duplicate*) YError* = POINTER TO YErrorR;
YErrorR = RECORD (Toestel.YErrorR) END;
DirectionOutOfBoundsError* = POINTER TO DirectionOutOfBoundsErrorR;
DirectionOutOfBoundsErrorR = RECORD (Toestel.DirectionOutOfBoundsErrorR) END;
SpeedOutOfBoundsError* = POINTER TO SpeedOutOfBoundsErrorR;
SpeedOutOfBoundsErrorR = RECORD (Toestel.SpeedOutOfBoundsErrorR) END;
HeightOutOfBoundsError* = POINTER TO HeightOutOfBoundsErrorR;
HeightOutOfBoundsErrorR = RECORD (Toestel.HeightOutOfBoundsErrorR) END;
DestinationError* = POINTER TO DestinationErrorR;
DestinationErrorR = RECORD (Toestel.DestinationErrorR) END;
DistanceError* = POINTER TO DistanceErrorR;
DistanceErrorR = RECORD (Toestel.DistanceErrorR) END;
(*duplicate*) TypeError* = POINTER TO TypeErrorR;
TypeErrorR = RECORD (Toestel.TypeErrorR) END;
WrongTypeError* = POINTER TO WrongTypeErrorR;
WrongTypeErrorR = RECORD (Toestel.WrongTypeErrorR) END;
EDIT:
De reden waarom ik het op deze manier wou heeft veel de maken met overerving van basisprocedures die andere basisprocedures oproepen die ook overgeervd zijn. Even een tekening:

De groene pijlen geven de oproepen aan en de rode de returnvalues. Stel nu dat extended ProcB een error geeft. Deze wordt dan aan base ProcB gegeven, die op zijn beurt een fout geeft omdat de error niet van een type is dat hij kent. (de code hierboven moest dit oplossen, maar gaf een duplicat fingerprint). Door extended ProcA gewoon opnieuw te maken (dus zonder overerving) is het probleem dus vermeden.
De (nu minder dringende) vraag blijft echter nog altijd:
Wat zijn duplicate fingerprints en hoe geraak je er vanaf?