我想把TClass存入链表TList中。function RegisterClass(ClassType:TClass):integer;
begin
 Result:=_List.Add(@ClassType);
end;RegisterClass(TLabel);
没有问题。但是如果我这样写:_List.Add(@TLabel)却发生编译时错误。。如果我使用第一种方法RegisterClass来添加到链表中,当我这样:
function AccessClass(idx:integer):TClass;
begin
  Result:=TClass(_list.item[idx]^);
end;
此时的Result返回的是一个nil。为什么啊??????
======================================
然后我就寻求另外的解决方案。
我没有使用TList,而是使用数组。
var _classCount:integer;_class:array[1..500] of TClass;
procedure ClearClasses;
begin
  _classCount:=0;
end;
function RegisterClass(ClassType:TClass):integer;
begin
 Inc(_classCount);
 _classes[_classCount]:=ClassType;
 Result:=_classCount;
end;
这样加感觉应该可以吧
但是
function AccessClass(idx:integer):TClass;
begin
  Result:=_classes[idx];
end;
返回的还是nil啊~~~
天啊~~这是万恶的旧社会

解决方案 »

  1.   

    你没有理解TClass本身就是一个指针!!
    将Result:=_List.Add(@ClassType);
    改为:
    Result:=_List.Add(ClassType);

    Result:=TClass(_list.item[idx]^);
    改为:
    Result:=TClass(_list.Items[idx]);
    就行了。另外:_List.Add(@TLabel)当然是不幸的,因为@后面要求是一个变量,而TLabel是一个类型标识符
    —————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  2.   

    看了看Classes.pas里面的一些源代码,呵呵~~~的确是指针。不过那我用数组代替TList为什么就不可以呢??