Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

проблема с Объявлением Классов [D7, WinXP]


Maxim____M ©   (2005-01-06 09:51:00) 



-----------------------------------------------------------------
type tMyClassList = class (tlist)

procedure Put(Index: Integer; Item: tmyclass;
       function Get(Index: Integer): tmyclass
.....
end;
-----------------------------------------------------------------
type tMyClass = class(tpersistent)

parent:tMyClassList
.....

end;
-----------------------------------------------------------------


ругань по поводу того что в первом случае не известнет класс tmyclass,
если поменять местами, то tMyClassList  будет неизвестнен.
Что делать? Плодить юниты?
Я их итак столько расплодил что сам не помню где что.
Как же быть?


Гаврила   (2005-01-06 19:04:00) [1]

еще раз послушай MBO
убери лишние TYPE

в одном блоке typeвсе пройдет с предобъявлением


begin...end   (2005-01-06 18:19:00) [2]

Поясню то, что я сказал в [17].

Вот вариант с опережающим описанием:

type
 TForm1 = class;

 TForms = class(TList)
   frms: array of TForm1
 end;

 TForm1 = class(TForm)
   private
     ...
   public
     ...
 end;


А вот - без опережающего описания:

type
 TForm1 = class(TForm)
   private
     ...
   public
     ...
 end;

 TForms = class(TList)
   frms: array of TForm1
 end;


Вот и всё.


begin...end   (2005-01-06 18:07:00) [3]

> [16] Maxim____M   (06.01.05 17:58)

А на мой вопрос из [1] Вы не хотите ответить? Может быть, не стоит мучиться, а вместо этого лучше воспользоваться готовым решением?

Относительно проблемы кода в [10]: оставьте только одно слово type, самое первое. И всё.

Посмотрите внимательно - Вы объявляете вначале класс TForm1как просто class (после первого type), а потом  (после третьего type) уточняетеэто объявление: TForm1 = class(TForm). Так вот: такое опережающее описание можно делать только при условии, что эти два объявления (предварительное и "уточняющее") находятся в одном и том же разделе type.

Да и зачем Вам именно опережающее описание?


Maxim____M   (2005-01-06 17:58:00) [4]

Anatoly Podgoretsky ©   (06.01.05 14:31) [14]
я привёл код в десятом посте.
после долгих мучений мне так и не удалось его исправить.
я не понял что имел ввиду MBo.

кривоваты  у  меня руки, видимо, а не кий.

Господа! Вы можете продолжать смеяться, над моей элементарной ошибкой, как это делает Fay, можете даже отправить меня в орешник, наверно так будет ещё веселей.
Почему так сложно подсказать,
КУДА НАДО ВСТАВИТЬ ЭТО ПРЕДОБЪЯВЛЕНИЕ?


KSergey   (2005-01-06 14:51:00) [5]

> [14] Anatoly Podgoretsky ©   (06.01.05 14:31)

Фигня.
Он ушел на другой форум. Страшно подумать на какой ;)

PS
Как говорит у нас один коллега после неудачного удара на бильярде "Ну кий этот несколько кривоват, что поделаешь..."


Anatoly Podgoretsky   (2005-01-06 14:31:00) [6]

Maxim____M   (06.01.05 12:01) [12]
Теперь приведи исправленый код или мы сами его должны в голове представить?


Fay   (2005-01-06 12:07:00) [7]

2 Maxim____M   (06.01.05 12:01) [12]
Дело не в Delphi. Отложите - попробуйте вечером.
Вечером не такое сильное влияние космисеских лучей.


Maxim____M   (2005-01-06 12:01:00) [8]

и так пробовал и сяк ничто не помогает,
потратил кучу времени,

а Дельфя только и делает, что посылает меня грубо,
наверно мне просто пришло всемя грубо послать её
и перейти на что-то другое, благо что проект ещё не гигантстких размеров.

всем спасибо за внимание и извините за беспокойтсво.


MBo   (2005-01-06 11:31:00) [9]

лишние type убери, оставь только одно, опережающее объявление должно разрешаться в этом же type-блоке.

и название parent измени на что-нибудь другое, иначе позже схлопочешь геморрой


Maxim____M   (2005-01-06 11:23:00) [10]


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type tform1 = class;
type tforms=class(tlist)
 frms:array of tform1;
end;

type
 TForm1 = class(TForm)
 
 private
   parent:tforms;
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

end.



Вот вам весь код. Друой программы, конечно.
Покажите мне 17-ю строку.
Я её в упор не вижу, я вижу всё то же

[Error] unit.pas(9): Type 'tform1' is not yet completely defined

Мне кажется что я делаю ровно то, что мне сказли во втором посте.


Fay   (2005-01-06 10:47:00) [11]

8))


MBo   (2005-01-06 10:46:00) [12]

>но проблема осталась
ошибка в 17 строке


Maxim____M   (2005-01-06 10:43:00) [13]

MBo ©   (06.01.05 10:21) [6]

у меня всё это в одном модуле, если вы имеете в виду unit,
но проблема осталась

aus   (06.01.05 10:20) [5]

естественно всё названо своими именами, и модули, и классы,
и класс не tmyclass называется на намного сложнее,
но для ясности картины я привожу тут условные имена.


MBo   (2005-01-06 10:21:00) [14]

все должно быть в одном модуле


aus   (2005-01-06 10:20:00) [15]

Чтобы меньше путаться, называй классы и модули (да и все остальное) осмысленными именами, а не Unit.pas, например.


Fay   (2005-01-06 10:17:00) [16]

8)


Maxim____M   (2005-01-06 10:15:00) [17]

MBo ©   (06.01.05 10:06) [2]

спасибо за помощь,
выглядет прекрасно и должно бы работать,
но опять ругань,
[Error] unit.pas(10): Type 'tMyClass' is not yet completely defined


MBo   (2005-01-06 10:06:00) [18]

type tMyClass = class;
type tMyClassList = class (tlist)
procedure Put(Index: Integer; Item: tmyclass;
      function Get(Index: Integer): tmyclass
.....
end;
-----------------------------------------------------------------
type tMyClass = class(tpersistent)

parent:tMyClassList
.....

end;


begin...end   (2005-01-06 09:54:00) [19]

> Maxim____M   (06.01.05 09:51)

> Я их итак столько расплодил что сам не помню где что.

Ну а мы тем более.

> Как же быть?

TMyClassList предназначен для хранения объектов? Тогда есть уже стандартный класс - TObjectList. См. также: TClassList.


Наверх

Титульная страница Поиск, карта сайта Написать письмо