Ho dichiarato il seguente tipo di enum in cui voglio che il primo membro abbia il valore ordinale di 1 (uno) piuttosto che il solito 0 (zero) :Perché ottengo l'errore "type has no typeinfo" con un enum type
type
TMyEnum = (
meFirstValue = 1,
meSecondValue,
meThirdValue
);
Se chiamo TypeInfo(), ad esempio, come parte di una chiamata a GetEnumName(), ottengo un errore di compilazione:
GetEnumName(TypeInfo(TMyEnum), Ord(aValue));
ERRORE: "E2134: Tipo 'TMyEnum' non ha typeinfo"
Perché è questo?
So che le classi hanno solo typeinfo se sono compilati con la $ M opzione compilatore attivata o (derivare da qualche classe che era, come ad esempio TPersistent), ma non pensavo che ci fossero delle condizioni particolari per avere typeinfo per i tipi di enum.
Forse si può alleviare il dolore di fare questo utilizzando un tipo subrange: tipo TMyEnumWithDummy = ( meNOTUSED, meFirstValue, meSecondValue, meThirdValue ); TMyEnum = Succ (meNOTUSED) ..Alta (TMyEnumWithDummy); –
Sì, in effetti, anche se si dispone di "spazi vuoti" nell'enumerazione, un sottosistema semplice non sarà sufficiente. Nel caso in cui mi sono imbattuto in questo ho avuto lacune - Purtroppo ho semplificato troppo per la "domanda" iniziale. Ma aggiornerò la risposta anche con il tuo suggerimento. – Deltics