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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.012 c
10-1115290907
Santyago
2005-05-05 15:01
2006.03.19
Как в Excel документе можно определить конец файла


3-1138164463
TimScorp
2006-01-25 07:47
2006.03.19
Проверка условий в БД.


1-1139909937
nastya
2006-02-14 12:38
2006.03.19
ActiveX -EIntfCastError


15-1140639598
Ломброзо
2006-02-22 23:19
2006.03.19
DMJS 1.0


15-1140514853
Увы..
2006-02-21 12:40
2006.03.19
загрузочный диск





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский