两个不同文件之间的Pascal类继承?
假设我有两个文件,两个不同文件之间的Pascal类继承?,pascal,lazarus,freepascal,delphi,Pascal,Lazarus,Freepascal,Delphi,假设我有两个文件,characters.pas和ogre.pas。食人魔是一个角色,但为了清洁起见,我尝试将这两个文件分开。在字符中。pas我有 unit Characters; {$mode objfpc}{$H+} interface type TCharacter = class(TOBject) private // ... public // ... published // ... end; implement
characters.pas
和ogre.pas
。食人魔是一个角色,但为了清洁起见,我尝试将这两个文件分开。在字符中。pas
我有
unit Characters;
{$mode objfpc}{$H+}
interface
type
TCharacter = class(TOBject)
private
// ...
public
// ...
published
// ...
end;
implementation
// Method bodies
end.
unit Ogre;
{$mode objfpc}{$H+}
interface
type
TOgre = class(TCharacter)
public
constructor create; override;
end;
implementation
constructor TOgre.create();
begin
// Banana banana banana
end;
end.
在ogre.pas中
我有
unit Characters;
{$mode objfpc}{$H+}
interface
type
TCharacter = class(TOBject)
private
// ...
public
// ...
published
// ...
end;
implementation
// Method bodies
end.
unit Ogre;
{$mode objfpc}{$H+}
interface
type
TOgre = class(TCharacter)
public
constructor create; override;
end;
implementation
constructor TOgre.create();
begin
// Banana banana banana
end;
end.
在任何一个.pas文件中添加
使用块都会引发错误,这使我相信所有依赖继承的类都必须与其父类位于同一个文件中。我遗漏了什么吗?是的,您遗漏了什么:使用部分。您必须声明,单位食人魔
使用单位字符
:
单位食人魔
{$mode objfpc}{$H+}
interface
uses
Characters;
type
TOgre = class(TCharacter)
public
constructor create; override;
end;
implementation
constructor TOgre.create();
begin
// Banana banana banana
end;
end.
阅读更多:
另外请注意,如果您希望某些字段从TCharacter
到TOgre
可见,但仍然无法从主程序访问,则必须将其可见性设置为受保护的是的,您会错过一些内容:使用部分。您必须声明,单位食人魔
使用单位字符
:
单位食人魔
{$mode objfpc}{$H+}
interface
uses
Characters;
type
TOgre = class(TCharacter)
public
constructor create; override;
end;
implementation
constructor TOgre.create();
begin
// Banana banana banana
end;
end.
阅读更多:
另外请注意,如果希望某些字段从TCharacter
到TOgre
可见,但仍然无法从主程序访问,则必须将其可见性设置为protected
在任何.pas文件中的任何位置添加uses块都会引发错误。如果能看到这些代码和错误,那就太好了细节。但是@Nestedtype已经回答了您的问题。在任何一个.pas文件中添加uses块都会引发错误。如果能看到这些代码和错误详细信息,那就太好了。但是@Nestedtype已经回答了您的问题。出于某种奇怪的原因,uses字段已经开始工作,尽管以前它会导致编译器抛出错误。非常感谢你的帮助!出于某种奇怪的原因,uses字段已经开始工作,尽管以前它会导致编译器抛出错误。非常感谢你的帮助!