Имеются два независимых объекта. Как заставить их работать сообща, тобишь чтобы переменная одного объекта (в моём случае - массив) могла быть доступна другому объекту при описании? Пока что вижу всего лишь один способ - объединить оба объекта в один
Пример готовых отдельных объектов приведи, и ЧТО ты хочешь чтобы было доступно - тоже... Посмотрим, как можно это реализовать... Кстати, для какого компилятора, уточни...
Цитата
чтобы переменная одного объекта (в моём случае - массив) могла быть доступна другому объекту при описании?
// TMenu Implementation section Constructor TMenu.Init(Var pGame: PTGame); begin p := pGame; end;
...
Procedure TMenu.DrawPlayGround; var Row, Column: Byte; begin For Row := 1 To MaxRows Do begin For Column := 1 To MaxColumns Do Write(p^.GetPG[Row, Column]); WriteLn; end; end;
// Variable Definition section Var Menu: ^TMenu; Game: ^TGame;
// Main Program's Logic section Begin New(Game, Init); New(Menu, Init(Game)); Menu^.DrawPlayGround; Dispose(Menu, Done); Dispose(Game, Done); End.
Тоеть насколько я понимаю, нельзя два независимых объекта согласовать без вложенности одного в другой?
Ну, я бы не сказал, что это вложенность, это все-таки p: PTGame, а следовательно указатель на объект типа TGame...
Цитата(comanche @ 13.03.2006 15:04)
Возникает второй вопрос: почему вы не выделяли память под P (pGame)? Constructor сам всё выделил?
Смотри, что происходит: тип TMenu содержит переменную P... Задача конструктора - выделить в памяти место, достаточное для хранения всех переменных, правда? Зачем я еще что-то должен делать? На то и Constructor ...
Цитата(comanche @ 13.03.2006 15:04)
Немного не понимаю вот этой строки: New(Menu, Init(Game));
Ну, я же поменял заголовок конструктора, и теперь
Constructor TMenu.Init(pGame: PTGame);
должен получать аргумент - указатель на TGame... Вот я и передаю его при инициализации...
Procedure TGame.RandomFillPG; var Row, Column: Byte; i: Byte; begin i := 0; For Row := 1 To MaxRows Do For Column := 1 To MaxColumns Do begin inc(i); PG[Row, Column] := i; end; end;
Procedure TGame.UserFillPG; begin end;
Function TGame.GetPG; begin GetPG := PG; end;
// TMenu Implementation section
Constructor TMenu.Init; begin P := PGame; end;
Destructor TMenu.Done; begin end;
Procedure TMenu.DrawPlayGround; var Row, Column: Byte; begin For Row := 1 To MaxRows Do begin For Column := 1 To MaxColumns Do Write(P^.GetPG[Row, Column]:3); WriteLn; end; end;
В том, что просто сделать Randomize недостаточно... Нужно еще и заполнить матрицу значениями. А для этого достаточно сказать компилятору, какая процедура этим занимается... Что я и сделал