Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1152625057
AlexanderMS
2006-07-11 17:37
2006.07.30
Добавить новый подпункт в пункт меню ActionMainMenuBar.


2-1152614581
SergP
2006-07-11 14:43
2006.07.30
Как сделать чтобы форма при создании не отбирала фокус?


2-1152375839
anton773
2006-07-08 20:23
2006.07.30
Tflestream


2-1152681115
zdm
2006-07-12 09:11
2006.07.30
JVCL


6-1142861728
linox
2006-03-20 16:35
2006.07.30
Строка на отдельный IP.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский