Главная страница
    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.011 c
15-1151736362
Константинов
2006-07-01 10:46
2006.07.30
Несколько вопросов про Крым


3-1148397351
rar
2006-05-23 19:15
2006.07.30
Трехзвенка


4-1145000154
Keks
2006-04-14 11:35
2006.07.30
Очередь печати принтера


3-1148381328
HelpMe
2006-05-23 14:48
2006.07.30
Ошибка с TSocketConnection


15-1151645539
Ega23
2006-06-30 09:32
2006.07.30
С Днём рождения! 30 июня





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский