Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
两个不同文件之间的Pascal类继承?_Pascal_Lazarus_Freepascal_Delphi - Fatal编程技术网

两个不同文件之间的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字段已经开始工作,尽管以前它会导致编译器抛出错误。非常感谢你的帮助!