Форум: "Основная";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
Внизпроблема с Объявлением Классов Найти похожие ветки
← →
Maxim____M (2005-01-06 09:51) [0]
-----------------------------------------------------------------
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 будет неизвестнен.
Что делать? Плодить юниты?
Я их итак столько расплодил что сам не помню где что.
Как же быть?
← →
begin...end © (2005-01-06 09:54) [1]> Maxim____M (06.01.05 09:51)
> Я их итак столько расплодил что сам не помню где что.
Ну а мы тем более.
> Как же быть?
TMyClassList предназначен для хранения объектов? Тогда есть уже стандартный класс - TObjectList. См. также: TClassList.
← →
MBo © (2005-01-06 10:06) [2]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;
← →
Maxim____M (2005-01-06 10:15) [3]MBo © (06.01.05 10:06) [2]
спасибо за помощь,
выглядет прекрасно и должно бы работать,
но опять ругань,
[Error] unit.pas(10): Type "tMyClass" is not yet completely defined
← →
Fay © (2005-01-06 10:17) [4]8)
← →
aus (2005-01-06 10:20) [5]Чтобы меньше путаться, называй классы и модули (да и все остальное) осмысленными именами, а не Unit.pas, например.
← →
MBo © (2005-01-06 10:21) [6]все должно быть в одном модуле
← →
Maxim____M (2005-01-06 10:43) [7]MBo © (06.01.05 10:21) [6]
у меня всё это в одном модуле, если вы имеете в виду unit,
но проблема осталась
aus (06.01.05 10:20) [5]
естественно всё названо своими именами, и модули, и классы,
и класс не tmyclass называется на намного сложнее,
но для ясности картины я привожу тут условные имена.
← →
MBo © (2005-01-06 10:46) [8]>но проблема осталась
ошибка в 17 строке
← →
Fay © (2005-01-06 10:47) [9]8))
← →
Maxim____M (2005-01-06 11:23) [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
Мне кажется что я делаю ровно то, что мне сказли во втором посте.
← →
MBo © (2005-01-06 11:31) [11]лишние type убери, оставь только одно, опережающее объявление должно разрешаться в этом же type-блоке.
и название parent измени на что-нибудь другое, иначе позже схлопочешь геморрой
← →
Maxim____M (2005-01-06 12:01) [12]и так пробовал и сяк ничто не помогает,
потратил кучу времени,
а Дельфя только и делает, что посылает меня грубо,
наверно мне просто пришло всемя грубо послать её
и перейти на что-то другое, благо что проект ещё не гигантстких размеров.
всем спасибо за внимание и извините за беспокойтсво.
← →
Fay © (2005-01-06 12:07) [13]2 Maxim____M (06.01.05 12:01) [12]
Дело не в Delphi. Отложите - попробуйте вечером.
Вечером не такое сильное влияние космисеских лучей.
← →
Anatoly Podgoretsky © (2005-01-06 14:31) [14]Maxim____M (06.01.05 12:01) [12]
Теперь приведи исправленый код или мы сами его должны в голове представить?
← →
KSergey © (2005-01-06 14:51) [15]> [14] Anatoly Podgoretsky © (06.01.05 14:31)
Фигня.
Он ушел на другой форум. Страшно подумать на какой ;)
PS
Как говорит у нас один коллега после неудачного удара на бильярде "Ну кий этот несколько кривоват, что поделаешь..."
← →
Maxim____M (2005-01-06 17:58) [16]Anatoly Podgoretsky © (06.01.05 14:31) [14]
я привёл код в десятом посте.
после долгих мучений мне так и не удалось его исправить.
я не понял что имел ввиду MBo.
кривоваты у меня руки, видимо, а не кий.
Господа! Вы можете продолжать смеяться, над моей элементарной ошибкой, как это делает Fay, можете даже отправить меня в орешник, наверно так будет ещё веселей.
Почему так сложно подсказать,
КУДА НАДО ВСТАВИТЬ ЭТО ПРЕДОБЪЯВЛЕНИЕ?
← →
begin...end © (2005-01-06 18:07) [17]> [16] Maxim____M (06.01.05 17:58)
А на мой вопрос из [1] Вы не хотите ответить? Может быть, не стоит мучиться, а вместо этого лучше воспользоваться готовым решением?
Относительно проблемы кода в [10]: оставьте только одно слово type, самое первое. И всё.
Посмотрите внимательно - Вы объявляете вначале класс TForm1 как просто class (после первого type), а потом (после третьего type) уточняете это объявление: TForm1 = class(TForm). Так вот: такое опережающее описание можно делать только при условии, что эти два объявления (предварительное и "уточняющее") находятся в одном и том же разделе type.
Да и зачем Вам именно опережающее описание?
← →
begin...end © (2005-01-06 18:19) [18]Поясню то, что я сказал в [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;
Вот и всё.
← →
Гаврила © (2005-01-06 19:04) [19]еще раз послушай MBO
убери лишние TYPE
в одном блоке type все пройдет с предобъявлением
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.045 c