1
votes

Say I have two files, characters.pas and ogre.pas. An ogre is a character, but I'm trying to separate the two files for cleanliness sake. In characters.pas I have

unit Characters;

{$mode objfpc}{$H+}

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

implementation
  // Method bodies
end.

In ogre.pas I have

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.

Adding a uses block anywhere in either of the .pas files throws an error, which leads me to believe that all classes that rely on inheritance must be in the same file as their parents. Am I missing something?

1
Adding a uses block anywhere in either of the .pas files throws an error It would be nice to see those code and error details. However @Nestedtype already answered to you question.Abelisto

1 Answers

4
votes

Yes you miss something: the use section. You have to declare that unit Ogre uses unit Characters:

unit Ogre;

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

read more:

Also note that if you want some fields to be visible from a TCharacter to a TOgre but still not accessible from the main program then you'll have to set their visibility to protected