Форум: "Начинающим";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];
ВнизПроблема с полем в классе Найти похожие ветки
← →
Asail (2006-07-09 02:22) [0]Есть некий класс, в котором опредено поле-массив и соответствующее свойство для него (включая функции чтения/записи). Класс описан так (сокращенно):
type
TCurRecord = Record
ISO : String[3];
Val : Real;
end;
type TCurRecords = Array Of TCurRecord;
type
TCurList = class
private
FCurRecords : TCurRecords;
public
function GetRecord(Indx : Integer) : TCurRecord;
procedure SetRecord(Indx : Integer; CurRec : TCurRecord);
property CurRecord[Indx : Integer] : TCurRecord read GetRecord write SetRecord;
. . .
end;
далее в программе определяю экземпляр класса:
var
CurList : TCurList;
begin
CurList := TCurList.Create;
end;
Потом пытаюсь занести значение в свойство таким образом:
CurList.CurRecord[0].ISO := "BBB";
Получаю ошибку при компиляции: "Left side cannot be assigned to".
Т.е. свойство CurRecord как-будто ReadOnly, хотя для него описанна процедура записи.
Что не так?
← →
SergP © (2006-07-09 09:50) [1]А SetLength не нужно делать?
← →
SergP © (2006-07-09 09:52) [2]
> Получаю ошибку при компиляции: "Left side cannot be assigned
> to".
Ой, блин.. плохо прочитал сразу. Извиняюсь...
← →
Loginov Dmitry © (2006-07-09 10:17) [3]По моему, так вообще нельзя делать. Объяви указатель
PCurRecord = ^TCurRecord и пробуй через него.
← →
Мефисто (2006-07-09 11:01) [4]
> Asail (09.07.06 02:22)
Потомучто как минимум у тебя в SetRecord - 2 параметра. Как программа должна понять присвоение такого типа - CurList .CurRecord[0].ISO := "BBB";
Свойсвта типа массива - это немного другая история.
var
CurList : TCurList;
R: TCurRecord;
begin
CurList := TCurList.Create;
R - (заполняем запись)
CurList.CurRecord[0] := R;
Тыже запись целиком присваиваешь :) Вот и присваивай. Если надо отдельным методом отредактировать запись, то:
procedure SetISORecord(Indx : Integer; ISO : String);
procedure TCurList.SetISORecord(Indx: Integer; ISO: String);
begin
FCurRecords[Indx].ISO := ISO;
end;
← →
Мефисто (2006-07-09 11:28) [5]procedure SetISORecord(Indx : Integer; ISO : String);
function GetISORecord(Indx : Integer): String;
property ISORec[Indx : Integer] : String read GetISORecord write SetISORecord;
end;
procedure TCurList.SetISORecord(Indx: Integer; ISO: String);
begin
FCurRecords[Indx].ISO := ISO;
end;
function TCurList.GetISORecord(Indx: Integer): String;
begin
Result := FCurRecords[Indx].ISO;
end;
Вот таким мокаром дселаны проперти для отдельного поля записи - TCurRecord
CurList.ISORec[0] := "BBB";
← →
Asail (2006-07-09 11:40) [6]
> Мефисто (09.07.06 11:28) [5]
Спасибо за ответ (всем) !
Так и сделал.
← →
Ketmar © (2006-07-09 11:45) [7]правильно говорит. ибо при таком описании подразумевается, что свойство возвращает копию записи. а в копию пиши, не пиши -- итог один. компилятор умён, он не делает копии, он просто не позволяет присваивать.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.02 c