Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.19;
Скачать: CL | DM;

Вниз

Как увидеть из одного юнита класс, описанный во втором   Найти похожие ветки 

 
Creative   (2006-03-03 11:40) [0]

Есть два юнита: Unit1, Unit2. в первом описан класс MyClass1. во втором описан класс - MyClass2. Одно из полей MyClass2 - FField: TMyClass1. Причем в Unit2 написано uses Unit1. Но компилятор пишет про  FField: TMyClass1 - undeclared identifier. Почему?

Точно такая же проблама с глобалной переменной: она объявлена в Unit1, но при вызове ее в Unit2 компилятор ее не узнает.

Я предполагаю, что юниты как то неправильно связаны, но не могу разобраться, как надо.


 
Сергей М. ©   (2006-03-03 11:42) [1]

все что должен "видеть" Unit2 должно быть описано в Unit1 не иначе как в разделе INTERFACE


 
Creative   (2006-03-03 11:50) [2]

Вообще то это так и есть

Unit Unit1;

interface

uses
  .......;

type
  MyClass1 = class
     ....
  end;

что то неправильно?


 
msguns ©   (2006-03-03 11:52) [3]

Чтобы избежать подобных "зацикливаний", надо объекты общего доступа (в данном случае MyClass1 и MyClass2 располагать в местах "общей видимости": Главной форме или датамодуле.
Рекомендуемая иерархия юнитов такова:

1. Датамодуль.
Содержит объекты и функции, доступные из любых юнитов проект. Сам "ни в ком не нуждается"
2. Главная форма.
Содержит объекты, классы и функции, доступные любым статически или динамически создаваемым объектам (формам), а также те из них, которые должны существовать в любой момент времени при обращении к ним из других объектов. Может ссылаться на объекты, классы и функции датамодуля.
3. Подчиненные формы.
Содержат объекты, классы и функции, необходимые для реализации собственно функционала формы, на которые не должно быть ссылок из других юнитов. Сами же они могут ссылаться на объекты, классы и функции Главной формы и датамодуля.

Для реализации более "тонких" связей служат интерфейсы.


 
Ega23 ©   (2006-03-03 11:55) [4]


> Есть два юнита: Unit1, Unit2. в первом описан класс MyClass1.
>  во втором описан класс - MyClass2. Одно из полей MyClass2
> - FField: TMyClass1. Причем в Unit2 написано uses Unit1.
>  Но компилятор пишет про  FField: TMyClass1 - undeclared
> identifier. Почему?


В какой секции поле описано? public? private? Другой?


 
Creative   (2006-03-03 11:57) [5]

А можно немногоконкретнее: вот есть модуль:

Unit Unit1;

interface

uses
 .......;

type
    ....
 end;

private
   { Private declarations }
 public
   { Public declarations }

Где именно лучше всего располагаться описаниям классов?


 
Creative   (2006-03-03 12:03) [6]

> Ega23 ©   (03.03.06 11:55) [4]
> В какой секции поле описано? public? private? Другой?

полу описано в паблике


 
Сергей М. ©   (2006-03-03 12:13) [7]

Unit Unit1;

interface
...

type

 MyClass1 = class
    ....
 end;

---------------------

Unit Unit2;

interface

uses .., Unit1...

type

 MyClass2 = class
    ....
  FField: TMyClass1; //не важно в какой секции
    ....
 end;


 
_RusLAN ©   (2006-03-03 12:27) [8]

Creative   (03.03.06 11:57) [5]
private
  { Private declarations }
public
  { Public declarations }

Где именно лучше всего располагаться описаниям классов?


privat и public уже относятся к описанию класса.

а структура модуля это:

unit Unit1;

interface
uses ...
var ...
...

implementation
uses ...
var ...
...
initialization
...
finalization
...
end.

end.


 
_RusLAN ©   (2006-03-03 12:30) [9]

_RusLAN ©   (03.03.06 12:27) [8]
последний end. лишний
:))


 
Creative   (2006-03-03 12:45) [10]

Спасибо всем, все встало на свои места и увиделось



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

Текущий архив: 2006.03.19;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.048 c
2-1141362828
Rubey
2006-03-03 08:13
2006.03.19
Повтор в DBGRID-е


2-1141566700
ctudent
2006-03-05 16:51
2006.03.19
Помогите разобраться с ошибкой!


9-1126442970
whatisthematrix1
2005-09-11 16:49
2006.03.19
Что-то с текстурой в OpenGl не так...


15-1140931551
Frozzen
2006-02-26 08:25
2006.03.19
Вопрос про VBA и Word


2-1141052609
anonymous-
2006-02-27 18:03
2006.03.19
Минимальный размер splitter