2013-07-19 40 views
6

Theo sau previous question của tôi, tôi đang cố gắng biên dịch mã từ một trong các câu trả lời ở đó.Tham số kiểu E2511 'T' phải là lỗi trình biên dịch loại lớp nghĩa là gì?

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

Trình biên dịch sẽ không biên dịch này và báo cáo thông báo lỗi này:

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

không thông báo lỗi này có nghĩa là gì, và làm thế nào tôi nên sửa chữa các mã?

+2

Tại sao không thêm nhận xét cho câu hỏi gốc? BTW Tôi đã chỉnh sửa câu trả lời để sửa lỗi –

+4

@SirRufo Đó là một gợi ý hay. Dù sao, tôi đã chỉnh sửa các câu hỏi để làm cho nó tổng quát hơn, và chỉnh sửa tiêu đề để bao gồm các thông báo lỗi. Điều này sẽ làm cho nó dễ tìm kiếm hơn. Cảm ơn bạn đã chỉnh sửa câu trả lời của tôi. –

Trả lời

11

TObjectList<T> bao gồm generic constraint rằng T là một lớp học. Khai báo kiểu như sau:

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

Bạn có thể nghĩ rằng các ràng buộc được kế thừa, nhưng điều đó không đúng. Và vì vậy bạn cần phải bao gồm các ràng buộc trong lớp học của bạn. Chỉ định ràng buộc như vậy:

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

bây giờ biên dịch là OK, Cảm ơn !!!! – Franz

Các vấn đề liên quan