Форум: "Начинающим";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];
ВнизСравнить record ы Найти похожие ветки
← →
Vovan#1 (2006-09-01 23:55) [0][code]
type
TMyRecord = record
a, b, c: Integer;
end;
var
Rec1, Rec2: TMyRecord;
begin
with Rec1 do
begin
a := 0;
b := 0;
c := 0;
end;
with Rec2 do
begin
a := 1;
b := 1;
c := 1;
end;
if (Rec1 = Rec2) then ShowMessage("Equal")
else ShowMessage("Different");
[/code]
= [Error] ????.pas(49): E2015 Operator not applicable to this operand type
Why? :(
← →
Zeqfreed © (2006-09-01 23:58) [1]Life"s unfair. Use per-field comparison or CompareMem function.
← →
Vovan#1 (2006-09-02 00:06) [2]Так Delphi нужно уволить.
← →
default © (2006-09-02 00:06) [3]вот бы тебе сюда перегрузку операторов и зажил бы по-человечески:)...
← →
Palladin © (2006-09-02 00:08) [4]а если говорить доступным для конференции языком :)
If CompareMem(@rec1,@rec2,SizeOf(tmyrecord)) then
при условии a,b,c integer, бо чуть отличись от integer эти три элемента и packed not used придется писать функцию почленного сравнения записи...
← →
Vovan#1 (2006-09-02 00:21) [5]>If CompareMem(@rec1,@rec2,SizeOf(tmyrecord)) then
Но ведь это +SysUtils = +400 Kb.
Буду по полям.
← →
Palladin © (2006-09-02 00:28) [6]
> Но ведь это +SysUtils = +400 Kb.
:))) ты откуда упал?
ой... это же "начинащим"
ну раз: 400кб это модуль с исходниками... а они как известно, даже не начинающему, в полном исходном размере ну ни как не могул линковаться к исполняемому модулю
ну два: традиция смарт юнит линк сохраняется в продуктах borland, относимых к семейству Pascal/Delphi и по сей день, что значит: сколько ты из модуля используешься столько и прилинкуется, ни на байт больше...
ну три: просто так... для четности...
← →
Vovan#1 (2006-09-02 00:32) [7]Да, я хотел уже писать, что переборщил с +400 кб, но ничего... ничего....
Вы, конечно же, догадались, что за мнемоническими TMyRecord стоял TRGBQuad (да, пусть полей больше - но это была проверка). Почему не посоветовали такое?:
[code]
var
a: TRGBQuad;
b: TRGBQuad;
c: TColor;
begin
a.rgbBlue := 0;
a.rgbGreen := 128;
a.rgbRed := 128;
a.rgbReserved := 0;
b.rgbBlue := 0;
b.rgbGreen := 128;
b.rgbRed := 128;
b.rgbReserved := 0;
If Integer(a) = Integer(b) then
...
[/code]
← →
Anatoly Podgoretsky © (2006-09-02 00:37) [8]Vovan#1 (02.09.06 00:32) [7]
Потому что у тебя не TRGBQuad, а запись из целых.
← →
Anatoly Podgoretsky © (2006-09-02 00:38) [9]Это мы телепатить не умеем, а читаем хорошо.
← →
Vovan#1 (2006-09-02 00:38) [10]TRGBQuad <> запись из целых???
← →
Vovan#1 (2006-09-02 00:39) [11]>Это мы телепатить не умеем, а читаем хорошо.
Посоветовали бы добавить в запись целое и тайпкастить?
← →
Vovan#1 (2006-09-02 00:41) [12]>Это мы телепатить не умеем, а читаем хорошо.
Ах да, я читаю плохо. Понял ошибку. Действительно, тут не протелепатишь. Всё, забыли. Главное - разобрались с делом. Всё, я программить... Всем спасибо.
← →
Palladin © (2006-09-02 00:44) [13]
> TRGBQuad <> запись из целых???
никому не известно из чего состоит TRGBQuad, но большинству известно, что запись (и любая единица) в Delphi будет пытаться 32битным компилятором выровнятся по именно этим 32ум битам...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c