Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.30;
Скачать: CL | DM;

Вниз

Проблема с полем в классе   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.031 c
15-1151599434
PSPF2003
2006-06-29 20:43
2006.07.30
Выход в инет


4-1143568002
que
2006-03-28 21:46
2006.07.30
Делфи и USB(HID complaince & device)


2-1152130244
KaLLeKa
2006-07-06 00:10
2006.07.30
Проблема с программой...


15-1151299906
Ega23
2006-06-26 09:31
2006.07.30
С Днём рождения! 24 июня


15-1151522536
Avgust
2006-06-28 23:22
2006.07.30
лицензия...