еще один вопрос
От: Pavel Dvorkin Россия  
Дата: 25.03.12 14:44
Оценка:
Господа, с Delphi 100 лет дела не имел, так что простите за вопрос чайника.

В коде есть примерно вот такое (кое-что опущено).


procedure X(SortList, MetaList: PPointerList);
//...
        T := SortList^[I];
        SortList^[I] := SortList^[J];
        SortList^[J] := T;

        K := MetaList[I];
        MetaList[I] := MetaList[J];
        MetaList[J] := K;
/...
end;


Turbo Delphi 2006 года с таким кодом вполне согласна и умпешно его компилирует. Delphi XE2 ругается

[DCC Error] X.pas(427): E2016 Array type required

Заменяю на


        K := MetaList^[I];
        MetaList^[I] := MetaList^[J];
        MetaList^[J] := K;


теперь все компилируется и даже вроде работает.

ИМХО первый вариант ошибочен (применение индекса к немассиву, да и вообще непонятно, почему с SortList используется ^, а с MetaList — нет), но тогда почему его Turbo Delphi пропускает ? А если он не ошибочен (говорю же, давно с Delphi дел не имел), то почему XE2 им недовольна ? В XE2 изменения в языке ? Или можно где-то в опциях восстановить прежнее поведение ?
With best regards
Pavel Dvorkin
Re: еще один вопрос
От: ViktorXP Украина  
Дата: 25.03.12 14:47
Оценка:
Проблема в объявлении переменной "T". Но так как ты посчитал этот код не существенным, то конкретно в чем проблема не скажу.
Re: еще один вопрос
От: Аноним  
Дата: 25.03.12 14:50
Оценка:
PD>почему с SortList используется ^, а с MetaList — нет)

потому что PPointerList. это ссылка на список. в некоторых случаях его можно упускать, в некоторых приходится указывать (иначе компилятор не правильно поймет).
Re[2]: еще один вопрос
От: Pavel Dvorkin Россия  
Дата: 25.03.12 14:52
Оценка:
Здравствуйте, ViktorXP, Вы писали:

VXP>Проблема в объявлении переменной "T". Но так как ты посчитал этот код не существенным, то конкретно в чем проблема не скажу.


var
I, J : Integer;
P, T, K : Pointer;
With best regards
Pavel Dvorkin
Re: еще один вопрос
От: hattab  
Дата: 25.03.12 17:22
Оценка: 14 (1)
Здравствуйте, Pavel Dvorkin, Вы писали:

В XE2 используй директиву компилятора {$POINTERMATH ON}
avalon 1.0rc3 build 428, zlib 1.2.3
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.