说我有两个文件,characters.pasogre.pas。食人魔是一个角色,但为了干净起见,我试图将两个文件分开。在characters.pas中,我有

unit Characters;

{$mode objfpc}{$H+}

interface
type
  TCharacter = class(TOBject)
    private
      // ...
    public
      // ...
    published
      // ...
  end;

implementation
  // Method bodies
end.


ogre.pas中,我有

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文件中的任何位置添加uses块都会引发错误,这使我相信依赖于继承的所有类都必须与其父类位于同一文件中。我想念什么吗?

最佳答案

是的,您错过了一些东西:use部分。您必须声明unit Ogre使用unit Characters

食人魔单位;

{$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.


阅读更多:


unit example @FPC
the use of a second form @FPC wiki


还要注意,如果希望某些字段从TCharacterTOgre可见,但仍不能从主程序访问,则必须将其可见性设置为protected

10-08 07:04