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

Вниз

Вариантные записи в ObjectPascal   Найти похожие ветки 

 
vidd ©   (2003-04-29 11:44) [0]

Подскажите, пожалста, как использовать вариантные записи.
Например

type
TMyRec = record
select AType: byte of
1: (A: integer);
2: (B: double);
3: (C: string);
end;

var
AVar: TMyRec;


И чего я теперь могу делать с AVar?


 
Skier ©   (2003-04-29 11:52) [1]

А такую запись компилятор пропускает ?

TMyRec = record
select AType: byte of
1: (A: integer);
2: (B: double);
3: (C: string);
end;


 
vidd ©   (2003-04-29 11:57) [2]

ну это я конечно перебрал...
пусть будэ:

type
TMyRec = record
case AType: byte of
1: (A: integer);
2: (B: double);
end;



 
Skier ©   (2003-04-29 12:01) [3]

В вариантных записях используется
общая память для вариантных частей.

Т.е.

var
AVar: TMyRec;
begin
AVar.AType := 1;
//работаем с полем AVar.A
AVar.AType := 2;
//работаем с полем AVar.B

end;



 
vidd ©   (2003-04-29 12:06) [4]

ага
значит надо таки указывать AType...
а я пытался сразу напрямую AVar присваивать значения
на что получал not enough actual parameters...
ну что-ж, спасибо за разьяснение


 
gg   (2003-04-29 12:17) [5]

Вы чего, надо работать не с AType, а непосредственно с A и B. т.е.
var
AVar: TMyRec;
begin
AVar.A := 1;
//работаем с полем AVar.A
AVar.B := 2;
//работаем с полем AVar.B

end;
точно также как и с обычной записью.

type
TMyRec = record
select AType: byte of
1: (A: integer);
2: (B: double);
3: (C: string);
end;

такое компилятор тоже поймет вполне нормально


 
Skier ©   (2003-04-29 12:23) [6]

>gg
Мда, батенька...


 
vidd ©   (2003-04-29 12:25) [7]

на string таки ругаецца:
[Error] vdRealFunc.pas(34): Type "String" needs finalization - not allowed in variant record


 
Skier ©   (2003-04-29 12:29) [8]

>vidd
если хочешь String в вариантных записях, то
1) используй ShortString
2) используй указатель на строку 3: (C: PString); , где
PString = ^String Но в этом случае внимательно следи на
выделением и освобождением памяти !


 
REA ©   (2003-04-29 12:30) [9]

А зачем циферки 1 2 3, если они не используются? Почему не 5 8 и 3112?


 
Smithson ©   (2003-04-29 12:32) [10]

Циферки любые могуть быть.
И все-таки без вских AType все прекрасно компилиться (Delphi 5).
Только что специально попробывал.


 
Anatoly Podgoretsky ©   (2003-04-29 13:04) [11]

REA © (29.04.03 12:30)
3112 нельзя



 
REA ©   (2003-04-29 14:58) [12]

Да понятно что нельзя, но непонятно зачем оно вообще?
Используются ведь для адресации только идентификаторы.
Может компилятору так легче или это чтобы пользователь сам не забыл зачем ему вариантная запись. Теряюсь в догадках.
В Си ведь просто union без всяких 1 2 3.


 
Anatoly Podgoretsky ©   (2003-04-29 15:00) [13]

Оно не нужно, но синтаксис такой, претензии Вирту


 
Skier ©   (2003-04-29 15:07) [14]

>Anatoly Podgoretsky
Хочу уточнить (для самообразования) : а в стандартном Паскале
Никлауса Вирта были вариантные записи ?


 
Внук ©   (2003-04-29 15:23) [15]

type
TMyRec = record
case AType: byte of
1: (A: integer);
2: (B: double);
end;
Здесь введено AType. Его можно (но необязательно) устанавливать, чтобы пользователь знал, что в данный конкретный момент дежит в вариантной части.
if AVar.AType=1 then //работаем с Ineteger иначе с Double
Когда это несущественно, можно имя тэга опустить:
TMyRec = record
case byte of
1: (A: integer);
2: (B: double);
end;
Здесь нельзя определить, что же сейчас лежит в вариантной части AVar.


 
Calm ©   (2003-04-29 17:10) [16]


> Хочу уточнить (для самообразования) : а в стандартном Паскале
> Никлауса Вирта были вариантные записи ?

Конечно нет. В стандартном паскале вообще мало чего было.
Borland Pascal отличается от изначального паскаля Вирта, как BP от Delphi6 (с D7 не работал, не знаю :)).


 
Skier ©   (2003-04-29 17:14) [17]

>Calm

> Конечно нет. В стандартном паскале вообще мало чего было.

Я это предполагал...


 
Anatoly Podgoretsky ©   (2003-04-29 17:45) [18]

Skier © (29.04.03 15:07)
Не помню, но если не были, то претензии к обскураторам



Страницы: 1 вся ветка

Текущий архив: 2003.05.12;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.009 c
11-34385
Линда
2002-08-11 20:07
2003.05.12
Есть ли в KOL компонента для отправки сообщение


1-34507
vidiv
2003-04-26 11:16
2003.05.12
Как сделать TButton белого цвета


1-34466
Кирилл Негодов
2003-04-29 11:47
2003.05.12
Вывод текста с разными свойствами в Memo.


6-34524
MMF
2003-03-14 13:25
2003.05.12
Ошибка при NMUDP.SendStream. Помогите побороть, плиз.


14-34547
Satirus
2003-04-21 18:52
2003.05.12
---|Ветка была без названия|---