He declarado el siguiente tipo de enumeración en el que quiero que el primer miembro tenga el valor ordinal de 1 (uno) en lugar del 0 habitual (cero) :¿Por qué obtengo el error "type no tiene typeinfo" con un enumeración tipo
type
TMyEnum = (
meFirstValue = 1,
meSecondValue,
meThirdValue
);
Si llamo TypeInfo(), por ejemplo, como parte de una llamada a GetEnumName(), me sale un error de compilación:
GetEnumName(TypeInfo(TMyEnum), Ord(aValue));
ERROR: "E2134 comercio: Tipo 'TMyEnum' no tiene typeinfo"
¿Por qué es esto?
sé que las clases sólo tienen typeinfo si se compilan con la opción compilador $ M habilitado o (derivarse de alguna clase que era, como TPersistent), pero no pensé que había alguna condición especial por tener typeinfo para tipos enum.
Tal vez usted puede aliviar el dolor de hacer esto mediante el uso de un tipo subrango: tipo TMyEnumWithDummy = ( meNOTUSED, meFirstValue, meSecondValue, meThirdValue ); TMyEnum = Succ (meNOTUSED) ..Alto (TMyEnumWithDummy); –
Sí, de hecho, aunque si tiene "huecos" en la enumeración, entonces un subrango simple no será suficiente. En el caso en que encontré esto, tuve lagunas. Desafortunadamente, me simplifiqué demasiado para la "pregunta" inicial. Pero también actualizaré la respuesta con su sugerencia. – Deltics