[Lazarus] Error: Generics without specialization cannot be used as a type for a variable

Sven Barth pascaldragon at googlemail.com
Fri May 6 22:06:55 CEST 2011


On 06.05.2011 17:58, Peter Williams wrote:
> Hi,
>
> Options changed, recompiling clean with -B
> Hint: Start of reading config file /etc/fpc.cfg
> Hint: End of reading config file /etc/fpc.cfg
> Free Pascal Compiler version 2.4.2-0 [2010/11/11] for i386
> Copyright (c) 1993-2010 by Florian Klaempfl
> Target OS: Linux for i386
> Compiling island_maker.lpr
> Compiling unit1.pas
> unit1.pas(144,19) Error: Generics without specialization cannot be used
> as a type for a variable
> unit1.pas(152,1) Fatal: There were 1 errors compiling module, stopping
>
> http://62.166.198.202/bug_view_advanced_page.php?bug_id=18101
>
> (0043710)
> Florian Klämpfl (administrator)
> 2010-11-29 10:47
>
> 	Please use always the latest release compiler (2.4.2) as starting
> compiler to build a new fpc.
>
>
> NB - I am using FPC 2.4.2.
>
> type
> Terrain_type = (Land, Sea);
>
> exit_type = array[ directions ] of integer;
>
> description_type = array[1..2] of string;
>
> Tmap_detail = Object
> FTerrain : Terrain_type;
> FTerrain_char : char;
> Fdescription : description_type;
> Fx, Fy, Flocation_number : integer;
> Fexits : exit_type;
> end;
>
> // The Island class definition
> Generic TIsland<T> = class
> Items : array of Tmap_detail;
> public
> constructor Create(AList: TList);: [Lazarus] dtm_maker project compile
> errors with TList code.
> procedure Add( Value : Tmap_detail );
> end;
> var
> Form1: TForm1;
> Island : TIsland; // line 144
>
> Unit1.pas >>> http://pastebin.com/wuEft4Kb

Why do you declare TIsland as a generic if you don't use the type "T" 
anywhere?

Nevertheless, you need to declare a specialized type of a generic, so 
you're able to use it.

Example:

type
   TIntegerIsland = specialize TIsland<Integer>;

var
   Island: TIntegerIsland;
(...)

Regards,
Sven




More information about the Lazarus mailing list