Oggi, per la prima volta in ambiente Pascal, mi trovo a dover eseguire un ciclo di tipo For ... downto.
Ebbene, con mia grande sorpresa il compilatore mi ha fornito il seguente Messaggio di Errore:
frm9.pas(1636,23) Error: Illegal assignment to for-loop variable "i"
Ecco la porzione di codice contenente il ciclo:
function CessazioneCreDebMorti(): AnsiString;
var
. . .
i, j, lun, n, nuPrimaRiga, nuRg, k, scarto: Integer;
. . .
for i:= nuRg downto nuPrimaRiga do
begin
for j:= 0 to 4 do
begin
Form8.Grid_PreAmmort_Cessaz.Cells[j, i]:= '';
end;
end;
La variabile i é di tipo Integer. Ho cercato di capire perchè è considerata illegale.
Se nella forma ordinaria del ciclo (For ... to) è consentita, allo stesso modo dovrebbe esserlo nella forma (For ... downto).
Ho cercato una qualche spiegazione in merito, ma non ho trovato niente che mi indirizzi su una variabile di tipo diverso. Tuttavia ho provato ma dichiarala di tipo word, ma non è cambiato niente.
Cosa bisogna fare allora perchè il compilatore non s'arrabbi?
procedure TForm1.FormCreate(Sender: TObject);
var nuRg, nuPrimaRiga, i, j:Integer;
begin
if (nuRg > nuPrimaRiga) then
begin
for i:=nuRg downto nuPrimaRiga do
begin
for j:=0 to 4 do
begin
Sleep(0);
end;
end;
end;
end;
Compila senza problemi ...
A me vengono in mente solo 2 cose: o c'è qualcosa nel resto del codice che in qualche maniera rompe le scatole, oppure la versione del compilatore che usi ha qualche bug.
Una cosa: se fai un "CTRL + Click tastro SX del mouse" sulle 2 variabili nuRg e nuPrimaRiga, ti va dove c'è la loro dichiarazione. E' possibile che hai usato gli stessi nomi in un altro punto del sorgente, e non ti vede quelle che pensi tu, ma altre 2 che non sono "integer"?
Ciao, Mario