2015-08-24 5 views
1

Скажем, у меня есть два файла: characters.pas и ogre.pas. Огр - персонаж, но я пытаюсь отделить два файла ради чистоты. В characters.pas У меня естьPascal - Наследование классов между двумя разными файлами?

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. 

Добавление uses блок в любом месте в любом из .pas файлов выдает ошибку, которая приводит меня к мысли, что все классы, которые полагаются на наследование должны быть в том же файле, что и их родители. Я что-то упускаю?

+2

_Добавление блока использования в любом из файлов .pas вызывает ошибку. Было бы неплохо увидеть эти данные кода и ошибки. Однако @Nestedtype уже ответил на ваш вопрос. – Abelisto

ответ

4

Да, вы пропустите что-то: раздел use. Вы должны заявить, что unit Ogre использует 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. 

подробнее:

Также обратите внимание, что если вы хотите, чтобы некоторые поля быть видны с TCharacter к TOgre, но до сих пор не доступны из основной программе, то вам необходимо установить их видимость на protected

+0

По какой-то странной причине поле uses начинает работать, хотя раньше это заставляло компилятор выкидывать ошибку. Большое спасибо за Вашу помощь! – Mark

 Смежные вопросы

  • Нет связанных вопросов^_^