Поскольку вы используете класс, вам не нужно использовать PExample.Классы уже являются ссылочными типами.
TExample<T> = class
data: T;
next: TExample<T>;
end;
Это должно работать без необходимости объявления каких-либо типов указателей.Типы указателей требуются, только если вы работаете с записями (которые являются типами значений).
EDIT:
К моему удивлению, я только что заметил, что это компилируется и работает в Delphi XE:
program Project;
{$APPTYPE CONSOLE}
type
TNode<T> = record
Next: ^TNode<T>;
Data: T;
end;
var
Node1, Node2: TNode<Integer>;
begin
Node1.Next := @Node2;
Node1.Data := 1;
Node2.Next := nil;
Node2.Data := 2;
WriteLn(Node1.Data);
WriteLn(Node1.Next.Data);
end.
Это все еще не решает проблему определения общего универсального типа указателя, потому что это:
PNode<T> = ^TNode<T>;
не работает.