![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
For loop control variable must be simple local variable
R13 © (2009-01-30 00:56:00)procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
for i=0 to 5 do memo1.Lines.Delete(i);
end;
Вылезает ошибка: For loop control variable must be simple local variable
Что я не так сделал? Че-т вообще не понимаю (=
Ega23 (2009-01-30 13:15:00) [1]
> то проще memo1.Lines.Clear сразу вызвать - и циклов не надо :)
Если уж на то пошло, то Memo1.Clear - ещё проще.
KSergey (2009-01-30 13:11:00) [2]> Ega23 © (30.01.09 12:18) [9]
Это типа все правильно, но если удаляем все строки (что предполагается обращением каждый раз к последнему элементу), то проще memo1.Lines.Clear сразу вызвать - и циклов не надо :)
Ega23 (2009-01-30 12:18:00) [3]Если удаляешь последний элемент, то не выполнится System.Move, т.к. сначала произойдёт декремент FCount и его значение станет равным Index
А если удалять всегда первый, то System.Move выполнится Count-1 раз.
qqq (2009-01-30 12:13:00) [4]
> Ega23 © (30.01.09 12:02) [7]
ну и как это сказывается на удалении 0-й строки?
Ega23 (2009-01-30 12:02:00) [5]
> for i:=5 downto 0 do memo1.Lines.Delete(0);
procedure TList.Delete(Index: Integer);
var
Temp: Pointer;
begin
if (Index < 0) or (Index >= FCount) then
Error(@SListIndexError, Index);
Temp := Items[Index];
Dec(FCount);
if Index < FCount then
System.Move(FList^[Index + 1], FList^[Index],
(FCount - Index) * SizeOf(Pointer));
if Temp <> nil then
Notify(Temp, lnDeleted);
end;
qqq (2009-01-30 11:43:00) [6]
> Ega23 © (30.01.09 10:18) [5]
не проще ли
for i:=5 downto 0 do memo1.Lines.Delete( 0);
тогда и направление перебора не важно
Ega23 (2009-01-30 10:18:00) [7]
> for i=0 to 5 do memo1.Lines.Delete(i);
Вообще-то:
for i:=5 downto 0 do memo1.Lines.Delete(i);
И учти, что если memo1.Lines.Count будет меньше 6, тоList index out of boundsполучишь.
Германн (2009-01-30 01:52:00) [8]Т.е. На бога надейся, а сам не плошай!
:)
Сообщения компилятора всего лишь подсказка. Понять эту подсказку должен сам программист.
Юрий Зотов (2009-01-30 01:12:00) [9]> R13 (30.01.09 01:04) [2]
> ошибка вылезает не о том, что двоеточие пропущено, а что i не является
> локальной переменной.
Нет, не так. Сама по себе, переменная i тут ни при чем и в сообщении о ней ничего не говорится. В нем говорится, что там, где должен быть оператор присваивания с локальной переменной, стоит что-то другое (в данном случае - логическое выражение).
R13 (2009-01-30 01:04:00) [10]*WALL*
я уж с горя сюда написал. всегда работало, а тут вдруг наотрез отказалось :)
главное ошибка вылезает не о том, что двоеточие пропущено, а что i не является локальной переменной.
Юрий Зотов (2009-01-30 01:02:00) [11]Двоеточие пропущено.
i := 0