2017-04-26 8 views
1

Quelqu'un sait-il pourquoi le code suivant génère une erreur interne L2095?Pourquoi la déclaration d'un TDictionary avec un type comme clé déclenche-t-elle une erreur interne L2095?

Apparemment, le compilateur a un problème avec la clé du dictionnaire étant un type de classe.

Quelqu'un sait-il qu'il existe une solution de rechange?

(PS: l'erreur n'est pas jeté quand je ne comprends pas la partie TestDict := TDictTest.Create; ou lorsque la clé est autre chose qu'un type de classe)

TTestClass = class 
    end; 

    TTypeOfTestClass = type of TTestClass; 

    TDictTest = TDictionary<TTypeOfTestClass,Integer>; 

var 
    TestDict: TDictTest; 

implementation 

initialization 

    TestDict := TDictTest.Create; 
    TestDict.Free 

Ajouté après la réponse:

Apparemment, il s'agit de moi ayant instinctivement utilisé "type of" au lieu de "class of". "Type of" est accepté par le compilateur, d'où la confusion. Une référence à une question à ce sujet: What "type of" declaration represents in Delphi and how can it be used

Répondre

3

Je ne pense pas que "type of ..." est même autorisé. Utilisez

TTypeOfTestClass = class of TTestClass; 

à la place.

+0

J'aurais dû utiliser "class of"! Je fais dans d'autres parties de mon code, mais pour une raison quelconque, j'ai utilisé "type de" cette fois et il compile, assez étrangement. Il semble être accepté partout sauf dans la déclaration TDictionary. Impair. Mais merci! – Domus