Tôi đã khai báo loại enum sau đây, trong đó tôi muốn thành viên đầu tiên có giá trị thứ tự là 1 (một) thay vì 0 thông thường (0) :Tại sao tôi nhận được lỗi "loại không có typeinfo" với kiểu enum
type
TMyEnum = (
meFirstValue = 1,
meSecondValue,
meThirdValue
);
Nếu tôi gọi TypeInfo(), ví dụ: như một phần của một cuộc gọi đến GetEnumName(), tôi nhận được một lỗi biên dịch:
GetEnumName(TypeInfo(TMyEnum), Ord(aValue));
LỖI: "E2134: Loại 'TMyEnum' không có typeinfo"
Tại sao điều này?
Tôi biết rằng các lớp học chỉ có typeinfo nếu họ được biên soạn với $ M tùy chọn trình biên dịch được kích hoạt hay (có nguồn gốc từ một số lớp đó là, chẳng hạn như TPersistent) nhưng tôi không nghĩ có bất kỳ điều kiện đặc biệt để có typeinfo cho các loại enum.
lẽ bạn có thể làm giảm bớt sự đau đớn để làm điều này bằng cách sử dụng một loại subrange: loại TMyEnumWithDummy = ( meNOTUSED, meFirstValue, meSecondValue, meThirdValue ); TMyEnum = Succ (meNOTUSED) ..Cao (TMyEnumWithDummy); –
Có thực sự, mặc dù nếu bạn có "khoảng trống" trong enum sau đó một subrange đơn giản sẽ không đủ. Trong trường hợp tôi bắt gặp vấn đề này, tôi đã có những khoảng trống - Thật không may, tôi đã đơn giản hóa quá mức cho "câu hỏi" ban đầu. Nhưng tôi cũng sẽ cập nhật câu trả lời với đề xuất của bạn. – Deltics