Проблемы с GetEnumName TypeInfo (консоль pascal/Delphi)

Работа с консольным приложением, использующим Delphi 7, и возникла проблема. Я получаю сообщение об ошибке в строке 26 после

str := GetEnumName(TypeInfo (words[3].group),

Ошибка читается "[Ошибка] Project1.dpr(26): стандартная функция TYPEINFO ожидает идентификатор типа" если кто-то может помочь с этим, это будет большой помощью!

Ура!

program Project1;
{$APPTYPE CONSOLE}
uses
 SysUtils,
 TypInfo;
type
 wordset = Record
 word : String;
 group : (flavour, colour, place, animal);
 end;
Var
 words : Array [1..50] of wordset;
 str : string;
 groups: string;
Begin
 words[1].word := 'chocolate';
 words[1].group := flavour;
 words[2].word := 'vanilla';
 words[2].group := flavour;
 words[3].word := 'strawberry';
 words[3].group := flavour;
 str := GetEnumName(TypeInfo (words[3].group), integer(group));
 readln;
end.
1 ответ

Вы пытаетесь передать там поле перечисления, а не идентификатор типа. Вам нужно объявить это перечисление отдельно (что находится в примере ниже типа TGroup). В любом случае существует неписаное соглашение использовать префикс Т для каждого идентификатора типа, чтобы вы могли легко распознать тип. Вот почему я переименовал Wordset в TWordset. Кроме того, слово не является хорошим именем для полей или переменных, поскольку это также тип данных в Delphi.

program Project1;
{$APPTYPE CONSOLE}
uses SysUtils, TypInfo;
type
 TGroup = (Flavour, Color, Place, Animal);
type
 TWordset = record
 Name: string;
 Group: TGroup;
 end;
var
 Str: string;
 Words: array [1..50] of TWordset;
begin
 Words[1].Name := 'Vanilla';
 Words[1].Group := Flavour;
 Words[2].Name := 'Green';
 Words[2].Group := Color;
 Words[3].Name := 'Home';
 Words[3].Group := Place;
 Words[4].Name := 'Cat';
 Words[4].Group := Animal;
 Str := GetEnumName(TypeInfo(TGroup), Integer(Words[3].Group));
 Writeln(Str);
 Readln;
end.

licensed under cc by-sa 3.0 with attribution.