Форум: "Начинающим";
Текущий архив: 2011.12.11;
Скачать: [xml.tar.bz2];
Внизкак правильно обратиться к полю? Найти похожие ветки
← →
brother_home (2011-08-29 09:55) [0]Приветствую!
есть:TPlayer = record
No: byte;
Name: string;
...
end;
TM = class(TObject)
private
FActivePlayer: byte;
...
function GetActivePlayer: TPlayer;
...
public
...
Player: array [1..MaxPlayers] of TPlayer;
...
property ActivePlayer: TPlayer read GetActivePlayer write ???
...
end;
function TM.GetActivePlayer: TPlayer;
begin
if FActivePlayer in [1..6] then
result:= Player[FActivePlayer]
else
result:= PlayerNull;
end;
данная конструкция позволяет только читать поля активного игрока,
а как реализовать запись, например:ActivePlayer.Name = "Игрок1";
пока пишу так:if FActivePlayer in [1..6] then Player[FActivePlayer].Name = "Игрок1";
← →
brother_home (2011-08-29 10:15) [1]может ссылку?
← →
Медвежонок Пятачок © (2011-08-29 10:32) [2]гетактивплеер.нэйм = "";
← →
Медвежонок Пятачок © (2011-08-29 10:35) [3]ну и проверить что оно не плеернул
← →
brother_home (2011-08-29 11:13) [4]
> гетактивплеер.нэйм = "";
так write не описан, значит будет тока реад онли...
← →
Медвежонок Пятачок © (2011-08-29 11:19) [5]с дерева упал?
← →
Медвежонок Пятачок © (2011-08-29 11:22) [6]райт не прописан гетактивплееру.
но мы-то меняем не активплеера а его нэйм, уже имея в руках самого TPlayer
← →
Медвежонок Пятачок © (2011-08-29 11:26) [7]И при присвоении значений возвращенному рекорду, код твоего дурацкого TM = class(TObject)
уже никаким боком не участвует.
← →
Медвежонок Пятачок © (2011-08-29 11:27) [8]... присвоении значений полям рекорда конечно.
← →
brother_home (2011-08-29 11:27) [9]
> гетактивплеер.нэйм = "";
ошибка: Left side cannot assigned to
← →
brother_home (2011-08-29 11:30) [10]я вопрос не зря задал...
← →
Медвежонок Пятачок © (2011-08-29 11:31) [11]Ты не свойству присваивай.
← →
brother_home (2011-08-29 11:33) [12]а к чему присваивать? можно подробнее?
← →
Медвежонок Пятачок © (2011-08-29 11:36) [13]PPlayer = ^TPlayer;
...
function GetActivePlayer: PPlayer;
...
p := TM.Create;
p.GetActivePlayer.Name := "Dunduk";
← →
brother_home (2011-08-29 11:42) [14]спасибо переделал, так правильно?:
property ActivePlayer: PPlayer read GetActivePlayer;
...function TManager.GetActivePlayer: PPlayer;
begin
if FActivePlayer in [1..6] then
result:= @Player[FActivePlayer]
else
result:= @PlayerNull;
end;
← →
brother_home (2011-08-29 11:43) [15]только я так и не понял, почему когда функция GetActivePlayer возвращает сам объект, то ошибка, а если указатель, то все норм?
← →
И. Павел © (2011-08-29 11:47) [16]Если разделить получение GetActivePlayer от изменения Name - компилятор не заметит подвоха :)
procedure TForm1.Button1Click(Sender: TObject);
var player: TPlayer;
OTM: TM;
begin
...
player := OTM.GetActivePlayer;
player.Name := "";
end;
← →
Медвежонок Пятачок © (2011-08-29 11:47) [17]Потому что рекорд это не объект.
И при геетактивплеер : TPlayer приходит копия рекорда.
И какой смысл присваивать ее полям что-то, если они дальше этой копии не уйдут и более того, сама копия умрет при выходе из зоны видимости.
← →
Медвежонок Пятачок © (2011-08-29 11:49) [18]procedure TForm1.Button1Click(Sender: TObject);
var player: TPlayer;
OTM: TM;
begin
...
player := OTM.GetActivePlayer;
player.Name := "";
end;
смотри выше.
все твои изменения будут жить недолго да еще и не там где ты хочешь.
← →
brother_home (2011-08-29 11:58) [19]
> И при геетактивплеер : TPlayer приходит копия рекорда.
> И какой смысл присваивать ее полям что-то, если они дальше
> этой копии не уйдут и более того, сама копия умрет при выходе
> из зоны видимости.
это я понял те по ссылке мы получаем не копию а как бы сам объект и тогда все гуд?
← →
И. Павел © (2011-08-29 12:04) [20]> это я понял те по ссылке мы получаем не копию а как бы сам
> объект и тогда все гуд?
Адрес получаем, и работаем с объектом по этому адресу. И тогда все гуд.
← →
brother_home (2011-08-29 12:08) [21]спасибо всем!
← →
Anatoly Podgoretsky © (2011-08-29 12:09) [22]
> Ты не свойству присваивай.
Можно и свойству, но его надо иметь.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.12.11;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.005 c