Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];

Вниз

Дочерний класс со ссылкой на родителя   Найти похожие ветки 

 
Nucer   (2008-08-21 17:22) [0]

Есть два класса: TField и TRobots.

Файл uField.pas:
unit uField;

interface

uses
 Windows, Messages, SysUtils, Classes, fs_iinterpreter, uRobots;

type

 TField = class(TObject)
   private
    FRobots:TRobots;
    FScript:TfsScript;
   public
    property robots: TRobots read FRobots;
    ...

    constructor Create;
    destructor Destroy; override;
   end;

implementation

constructor TField.Create;
begin
FRobots:=TRobots.Create(self);
end;

destructor TField.Destroy;
begin
FRobots.Free;
FRobots:=nil;
end;

end.


Файл uRobots.pas:
unit uRobots;

interface

uses
 Windows, Messages, SysUtils, Classes;

type

 TField = class(TObject);

 TRobots = class(TObject)
   private
    FField:TField;
    ...
   public
    ...
   
    constructor Create(field:TField);
    destructor Destroy; override;
   end;

implementation

uses uField;

constructor TRobots.Create(field:TField);
begin
FField:=Field;
...
end;

destructor TRobots.Destroy;
begin
...
end;

end.


При компиляции получаю ошибку:
[Error] uField.pas(26): Incompatible types: "uRobots.TField" and "uField.TField"

Как исправить?


 
ЛшдлуттнСфе   (2008-08-21 17:24) [1]

не объявлять лишний раз.


 
stas ©   (2008-08-21 17:27) [2]

А почему не объявить Ufield  вверху?


 
Nucer   (2008-08-21 17:32) [3]

>А почему не объявить Ufield  вверху?
Потому что будет другая ошибка:
[Fatal Error] uField.pas(6): Circular unit reference to "uField"


 
Ega23 ©   (2008-08-21 17:35) [4]

А зачем ты их по разным модулям разносишь? Им самое место быть в едином модуле.


 
Nucer   (2008-08-21 17:39) [5]

>А зачем ты их по разным модулям разносишь? Им самое место быть в едином модуле.

Все равно один класс будет объявлен ниже, и получится "undeclared identifier". Или это как-то можно обойти?


 
stas ©   (2008-08-21 17:41) [6]

там вроде ненадо писать  TField = class(TObject);
а так надо  TField = class;


 
Nucer   (2008-08-21 17:44) [7]

>а так надо  TField = class;
Получаю:
Type "TField" is not yet completely defined


 
stas ©   (2008-08-21 17:45) [8]

У меня так работает, правда все в одном модуле.


 
stas ©   (2008-08-21 17:47) [9]

ниже объяви,то что в другом модуле и будет работать.


 
Nucer   (2008-08-21 17:47) [10]

Да, сейчас проверил, если все скинуть в один модуль и добавить TField = class, то работает. Но хотелось бы разбить на 2 файла, т.к. кода будет много. Этого никак нельзя добиться малой кровью?


 
Ega23 ©   (2008-08-21 17:54) [11]


> Этого никак нельзя добиться малой кровью?


Создать TCustomField, в котором описать те методы, которые будут использоваться в TRobot. Соответственно, TRobot знает только про существование TCustomField.
Ну а ты уже наследуешься от TCustomField в другом юните и переопределяешь (если надо) нужные тебе методы.

З.Ы. А много кода это сколько? 20.000 строк?



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.006 c
2-1219467347
apic
2008-08-23 08:55
2008.10.05
Создание папок


3-1207286680
Alexey
2008-04-04 09:24
2008.10.05
Отчёты для БД


15-1218621334
Del
2008-08-13 13:55
2008.10.05
Delphi & SQL


15-1218659598
Германн
2008-08-14 00:33
2008.10.05
Помогите, кто может! Сдать зачёт.


15-1219046504
Vlad Oshin
2008-08-18 12:01
2008.10.05
Отладка программы. Ничего не понимаю..





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский