2011-06-08 50 views
3

使用Delphi 7处理控制台应用程序,并且遇到问题。 GetEnumName TypeInfo问题(pascal/Delphi控制台)

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

错误显示为“[Error] 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. 

回答

7

您正在试图通过有枚举字段不是类型标识符。您需要单独声明此枚举(在TGroup类型下面的示例中是什么)。

反正有使用牛逼前缀每个类型标识符,那么你可以很容易识别类型一个不成文的约定。这就是为什么我更名为WordsetTWordset。另外单词不是字段或变量的好名字,因为它也是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. 
+0

Thanks Daemon_x works great !!! – Chunky1318 2011-06-08 02:43:10

+3

+1关于类型的T前缀的好评。 – NGLN 2011-06-08 06:51:39