Главная страница
    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
11-1193921645
MTsv DN
2007-11-01 15:54
2008.10.05
QProg и KOL v.2.83 (и выше)


2-1219307844
ничтожная козявка
2008-08-21 12:37
2008.10.05
заNILить форму после Close;


15-1218629279
Вася111
2008-08-13 16:07
2008.10.05
Защита от "пиратирования" проги


11-1194023893
Сидор
2007-11-02 20:18
2008.10.05
Проблема с KOLMainMenu


2-1219337052
boa
2008-08-21 20:44
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский