Проблемы с GetEnumName TypeInfo (консоль pascal / Delphi) - PullRequest
3 голосов
/ 08 июня 2011

Работаем над консольным приложением, использующим 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 Ответ

7 голосов
/ 08 июня 2011

Вы пытаетесь передать туда поле перечисления, а не идентификатор типа . Вам необходимо объявить это перечисление отдельно (как в примере ниже TGroup type).

В любом случае существует неписанное соглашение об использовании префикса T для каждого Введите идентификатор , чтобы вы могли легко распознать Тип . По этой причине я переименовал Wordset в TWordset . Также word не подходит для полей или переменных, потому что это также тип данных в 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.
...