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

Вниз

Сравнение записей.   Найти похожие ветки 

 
SergP ©   (2006-11-19 13:31) [0]

Толи лыжи не едут, толи я чего-то не понимаю, вобщем:

...
type Factor = packed record
      Num:byte;
      Position:byte;
    end;
...
var
...
 Mas:array[1..5040] of record
     Num:word;
     Str:string[4];
     f: array[1..4] of Factor;
     end;
...
procedure TForm1.Button4Click(Sender: TObject);
var
 i:integer;
 x1,x2:Factor;
begin
...
 for i:=1 to 5040 do
 begin
  if (mas[i].f[1]=x1) and (mas[i].f[2]=x2) then
...
 end;
end;
...


Вот на строку с if (mas[i].f[1]=x1) and (mas[i].f[2]=x2) then
ругается такой руганью

[Error] Unit1.pas(141): Incompatible types
[Error] Unit1.pas(141): Incompatible types

С чего это Дельфе показалось что несоответствие типов?

PS Странно... Что-то я раньше почему-то не натыкался на такие приколы...


 
Anatoly Podgoretsky ©   (2006-11-19 13:34) [1]

> SergP  (19.11.2006 13:31:00)  [0]

Не уверен, что приведен достаточный код.


 
SergP ©   (2006-11-19 13:42) [2]

Вот. поэкспериментировал... Это полный код:


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

 type Factor = packed record
      Num:byte;
      Position:byte;
    end;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
 a,b:Factor;
begin
 if a=b then exit;
end;

end.


Ошибка та же самая... несоответствие типов...
Записи что-ли на Дельфе сравнивать нельзя?


 
Anatoly Podgoretsky ©   (2006-11-19 13:47) [3]

> SergP  (19.11.2006 13:42:02)  [2]

Вот теперь приведенный код позволяет сделать диагноз.
Убери второй type


 
Anatoly Podgoretsky ©   (2006-11-19 13:49) [4]

> SergP  (19.11.2006 13:42:02)  [2]

Ой, только что заметил, ты же записи пытаешься сравнивать, а надо члены.


 
guav ©   (2006-11-19 14:42) [5]

Так записи сравнивать нельзя.
Пищи явно сравнение по полям.

Думаю это связано с трудностями реализации для не packed записей, и записей с вариантными частями. RTTI вроде есть только для записей с long strings, dyn arrays, variants, interfaces. О полях byte RTL не знает.


 
Eraser ©   (2006-11-19 14:48) [6]

> [5] guav ©   (19.11.06 14:42)

ну в принципе можно, с пом. CompareMemory например, но средствами языка конечно нельзя.


 
guav ©   (2006-11-19 14:50) [7]

> [6] Eraser ©   (19.11.06 14:48)
> ну в принципе можно, с пом. CompareMemory например

обычно нельзя.
т.к. часто записи не упакованы и мусор может быть разный, потом как ты это видишь для строк AnsiString и для вещественных чисел и для тех же записей с вариантными частями ?


 
Anatoly Podgoretsky ©   (2006-11-19 14:54) [8]

> Eraser  (19.11.2006 14:48:06)  [6]

Ага, очень интерсна будет такая проверка для динамических структур.


 
Eraser ©   (2006-11-19 14:56) [9]

> [7] guav ©   (19.11.06 14:50)

ну именно по-этому и нет встроенной возможности сравнивать записи, но в частных случаях, когда, допустим, имеется запись без вариантной части с огромным количесвом полей и нужно сравнить её на равно/не равно, то проще оформить запись в соответствии с выравниванием (или вообще как упакованую) и сравнивать CompareMemory, чем писать код, где сравнивается последовательно каждое поле.


 
Eraser ©   (2006-11-19 14:56) [10]

> [8] Anatoly Podgoretsky ©   (19.11.06 14:54)

а нечего в записи указатели пихать :)


 
SergP ©   (2006-11-19 16:31) [11]

> [9] Eraser ©   (19.11.06 14:56)
> > [7] guav ©   (19.11.06 14:50)
>
> ну именно по-этому и нет встроенной возможности сравнивать
> записи,


а в принципе могли бы и сделать для packed record которые не содержат динамических структур...

Впрочем пока обошелся добавлением вариантного поля...


 
Anatoly Podgoretsky ©   (2006-11-19 17:31) [12]

> SergP  (19.11.2006 16:31:11)  [11]

Ты представляешь как это будет выглядеть?

Тут играем, тут не играем, а тут рыба лежала.


 
SergP ©   (2006-11-19 19:48) [13]

> [12] Anatoly Podgoretsky ©   (19.11.06 17:31)
> > SergP  (19.11.2006 16:31:11)  [11]
>
> Ты представляешь как это будет выглядеть?


Да.



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

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

Наверх




Память: 0.5 MB
Время: 0.039 c
2-1164269566
IGo
2006-11-23 11:12
2006.12.10
Пронрамное создание элемента CheckBox


15-1164004463
pssst
2006-11-20 09:34
2006.12.10
win 2003


2-1163903847
Мальвина
2006-11-19 05:37
2006.12.10
Работа с микшером винды


15-1163854834
MsGuns
2006-11-18 16:00
2006.12.10
Поздравляю болельщиков ЦСКА !!!


15-1163923518
KilkennyCat
2006-11-19 11:05
2006.12.10
Ну что, приняли нас в ВТО, или еще нет?