![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
проблема с Объявлением Классов [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.