2013-07-19 16 views
6

Po moim previous question, próbuję skompilować kod z jednej z odpowiedzi tam.Co oznacza, że ​​parametr typu "T" E2511 musi być błędem kompilatora typu klasy?

type 
    TSearchableObjectList<T> = class(TObjectList<T>) 
    end; 

Kompilator nie będzie to skompilować i raporty ten komunikat o błędzie:

 
[dcc32 Error]: E2511 Type parameter 'T' must be a class type 

Co ma oznaczać ten komunikat o błędzie, a jak mam rozwiązać ten kod?

+2

Dlaczego nie dodać komentarza do pytania początkowego? BTW Edytowałem odpowiedź, aby naprawić to –

+4

@SirRufo To dobra sugestia. W każdym razie, zredagowałem pytanie, aby było bardziej ogólne i zredagowałem tytuł, aby dołączyć komunikat o błędzie. Powinno to ułatwić wyszukiwanie. Dziękuję również za edycję mojej odpowiedzi. –

Odpowiedz

11

TObjectList<T> zawiera generic constraint, który T jest klasą. Deklaracja typu jest następująca:

type 
    TObjectList<T: class> = class(TList<T>) 
    ... 
    end; 

Możesz myśleć, że ograniczenia są dziedziczone, ale tak nie jest. A więc musisz uwzględnić ograniczenie w swojej klasie. Określ ograniczenia tak:

type 
    TSearchableObjectList<T: class> = class(TObjectList<T>) 
    ... 
    end; 
+0

teraz kompilacja jest OK, dzięki !!!! – Franz

Powiązane problemy