unclear (Duplicate identifier) error lazarus / 62-General ---------------------------------------------------------------------- fcu · 2018-02-22 14:21 Hi try to compile this with fpc 3.0.4 & fpc 3.1.1 , gives this error (Duplicate identifier "tNode$1$crc7ED07D64") Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i {$mode delphi}type        tNode = record          data : T;          next : ^tNode;        end;         tLList = object          procedure add(const item : T);        private          head : ^tNode;        end; procedure tLList.add(const item : T);var     tmp : ^tNode; // Error: Duplicate identifier "tNode$1$crc7ED07D64"begin        //end; beginend.  am i doing something wrong or its fpc bug ? ---------------------------------------------------------------------- ASerge · 2018-02-22 15:48 When mode is objfpc: Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i program Project1;{$APPTYPE CONSOLE}{$MODE OBJFPC} type  generic TNode = object  public type    PNode = ^TNode;  public var    Data: T;    Next: PNode;  end;   generic TList = object  private type    PNode = specialize TNode.PNode;  private var    FHead: PNode;  public    constructor Init;    destructor Done;    procedure Add(const Item: T);    procedure PrintAll;  end; constructor TList.Init;begin  FHead := nil;end; destructor TList.Done;var  Prev: PNode;begin  while FHead <> nil do  begin    Prev := FHead;    FHead := FHead^.Next;    Dispose(Prev);  end;end; procedure TList.Add(const Item: T);var  Tmp: PNode;begin  New(Tmp);  Tmp^.Data := Item;  Tmp^.Next := FHead;  FHead := Tmp;end; procedure TList.PrintAll;var  Cur: PNode;begin  Cur := FHead;  while Cur <> nil do  begin    Writeln(Cur^.Data);    Cur := Cur^.Next;  end;end; var  List: specialize TList;begin  List.Init;  List.Add(10);  List.Add(20);  List.PrintAll;  List.Done;  Readln;end. ---------------------------------------------------------------------- fcu · 2018-02-22 16:17 thanks ASerge . but my attention was : what is the cause of this error just curious , why ( head : ^tNode; ) was allowed inside tLList class and not in the (add ) procedure  ? ---------------------------------------------------------------------- ASerge · 2018-02-22 16:41 Quote from: fcu on February 22, 2018, 05:17:28 pmthanks ASerge . but my attention was : what is the cause of this error just curious , why ( head : ^tNode; ) was allowed inside tLList class and not in the (add ) procedure  ? An example for both modes, where it is clearly visible that the types of pointers are different! Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i program Project1;{$APPTYPE CONSOLE}{-$MODE DELPHI}{$MODE OBJFPC} type  {$IFDEF FPC_OBJFPC}generic{$ENDIF}TNode = object  public type    PItemNode = ^TNode{$IFDEF FPC_DELPHI}{$ENDIF};  public var    Data: T;    Next: PItemNode;  end;   {$IFDEF FPC_OBJFPC}generic{$ENDIF}TList = object  private type    PListNode = {$IFDEF FPC_OBJFPC}specialize{$ENDIF}TNode.PItemNode;  private var    FHead: PListNode;  public    constructor Init;    destructor Done;    procedure Add(const Item: T);    procedure PrintAll;  end; constructor TList{$IFDEF FPC_DELPHI}{$ENDIF}.Init;begin  FHead := nil;end; destructor TList{$IFDEF FPC_DELPHI}{$ENDIF}.Done;var  Prev: PListNode;begin  while FHead <> nil do  begin    Prev := FHead;    FHead := FHead^.Next;    Dispose(Prev);  end;end; procedure TList{$IFDEF FPC_DELPHI}{$ENDIF}.Add(const Item: T);var  Tmp: PListNode;begin  New(Tmp);  Tmp^.Data := Item;  Tmp^.Next := FHead;  FHead := Tmp;end; procedure TList{$IFDEF FPC_DELPHI}{$ENDIF}.PrintAll;var  Cur: PListNode;begin  Cur := FHead;  while Cur <> nil do  begin    Writeln(Cur^.Data);    Cur := Cur^.Next;  end;end; var  List: {$IFDEF FPC_OBJFPC}specialize{$ENDIF}TList;begin  List.Init;  List.Add(10);  List.Add(20);  List.PrintAll;  List.Done;  Readln;end. Those, when it is written ^TNode the compiler does not understand what to choose.