Форум: "Начинающим";
Текущий архив: 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