Упреждающее описание класса

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Упреждающее описание класса

Сообщение Tango » 10.07.2013 10:44:00

Здравствуйте.

Если Есть класс, который нужно указать до его объявления, например.


Код: Выделить всё
unit Abstrqact;

Interface

Procedure DoЧтото(ClassA:TMyClass);

Implementation

  TMyClass = class
    a:Integer;
    Procedure ClassActions;
  end;

//////

end.



Как сделать так что бы и процедура объявилась и класс не был выставлен напоказ.
В данном случае это всего лишь понятный пример и не выставлять класс напоказ я не преследую.
Аватара пользователя
Tango
постоялец
 
Сообщения: 162
Зарегистрирован: 31.05.2012 17:07:30

Re: Упреждающее описание класса

Сообщение Vadim » 10.07.2013 12:29:05

Tango
Обычно просто берут, и объявляют класс:
Код: Выделить всё
Type
TMyClass = class;

TMyClass2 = class
  FClass: TMyClass;
end;

Но его ведь всё равно придётся описывать где-то в другом месте, иначе зачем это Вам?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Упреждающее описание класса

Сообщение Tango » 10.07.2013 14:38:27

Так не прокатывает
TMyClass = class;
Type "TDCLDBGrid" is not completely defined
Аватара пользователя
Tango
постоялец
 
Сообщения: 162
Зарегистрирован: 31.05.2012 17:07:30

Re: Упреждающее описание класса

Сообщение Vadim » 10.07.2013 15:47:40

Tango писал(а):Type "TDCLDBGrid" is not completely defined

А вот это вопрос уже к Вам - где Вы это берёте и почему Ваш класс объявлен не до конца. Это чисто Ваши проблемы. Может Вас кошка отвлекает и Вы забываете окончить объявление класса. :)
То, что я Вам написал - работает, но только с цчётом именно того, что я Вам написал. ;)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Упреждающее описание класса

Сообщение Tango » 10.07.2013 16:46:27

А если Typы разные из разных секций?
Аватара пользователя
Tango
постоялец
 
Сообщения: 162
Зарегистрирован: 31.05.2012 17:07:30

Re: Упреждающее описание класса

Сообщение Лекс Айрин » 10.07.2013 17:05:17

Tango, пример такого описания, допустим, есть в Controls.pp

Код: Выделить всё
TWinControl = class;
.....
{намного позже}
......
TWinControl = class(TControl)
  private
    FAlignOrder: TFPList; // list of TControl. Last moved (SetBounds) comes first. Used by AlignControls.
    FBorderWidth: TBorderWidth;
    FBoundsLockCount: integer;
  .........
    function BrushCreated: Boolean;
    procedure EraseBackground(DC: HDC); virtual;
    function IntfUTF8KeyPress(var UTF8Key: TUTF8Char;
                              RepeatCount: integer; SystemKey: boolean): boolean; virtual;
    procedure PaintTo(DC: HDC; X, Y: Integer); virtual; overload;
    procedure PaintTo(ACanvas: TCanvas; X, Y: Integer); overload;
    procedure SetShape(AShape: TBitmap); overload;
    procedure SetShape(AShape: TRegion); overload;
  end;                                                 
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Упреждающее описание класса

Сообщение Vadim » 10.07.2013 18:38:01

Tango писал(а):А если Typы разные из разных секций?

Имеет значение толшько тот основополагающий фактор - прежде чем использовать тот или иной компонент, его нужно объявить. Где Вы его объявляете - Ваше дело, лишь бы объявляли до первого использования.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Упреждающее описание класса

Сообщение Alex2013 » 01.08.2013 15:57:11

Type
TMyClass = class;

Procedure DoЧтото(ClassA:TMyClass);
....

Type

TMyClass2 = class
FClass: TMyClass;
end;


Видимо не верно по моему нужно так :
Код: Выделить всё
Type
TMyClass = class;

Procedure DoЧтото(ClassA:TMyClass);
...
Type
TMyClass = class
...
end;
Alex2013
долгожитель
 
Сообщения: 3146
Зарегистрирован: 03.04.2013 11:59:44


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 224

Рейтинг@Mail.ru