2011-06-08 35 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