标识符不是子类的成员

时间:2013-06-12 16:18:06

标签: casting pascal

我在Pascal做了一个小项目,我遇到了问题。

我有3个班级(1个父母2个孩子)

TGroup = class
...
end;

TUser = class(TGroup)
...
  public
  someVariableForUser: Integer;
...
end;

TAdmin = class(TGroup)
...
  public
  someVariableForAdmin: Integer;
...
end;

//And main program like this:

var 
  Person: TGroup;
begin
  Person := TGroup.Create();
  Person.someVariableForAdmin := 1;

我得到错误:标识符idents没有成员“someVariableForAdmin”

当我更改var Person:TAdmin时,一切正常。 请帮忙,非常感谢。

1 个答案:

答案 0 :(得分:1)

这正是应该期待的。 TGroup实例不知道从中下降的类型,或者后代可能声明的任何字段或方法。如果您想访问TAdmin及其后代中包含的内容,则需要创建TAdmin或其中一个后代的实例。

如果您想访问TAdmin中的内容,则必须首先创建TAdmin

var
  Person: TGroup;

begin
  Person := TAdmin.Create;
  (Person as TAdmin).someVariableForAdmin := 1;
end.

从你的问题中不清楚你到底想要完成什么。您可能希望发布另一个问题来解释您的目标,发布一些基本代码,并在更改它以达到该目标时寻求帮助。 (为此编辑此内容为时已晚,因为在您收到多个答案后,这会改变问题的全部含义。)