Главная страница
    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.013 c
9-1126532168
Signate
2005-09-12 17:36
2006.03.19
Игровой цикл


2-1141316644
Vitalik__
2006-03-02 19:24
2006.03.19
замена StringGrid а


15-1140607026
Никита
2006-02-22 14:17
2006.03.19
Delphi скоро умрет!!!


4-1135870536
Sergey2005
2005-12-29 18:35
2006.03.19
Отловить завершение виндовс.


4-1135599209
psa247
2005-12-26 15:13
2006.03.19
ShellExecuteEx !





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