Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2009, 17:57   #1
Hehe
Пользователь
 
Аватар для Hehe
 
Регистрация: 09.12.2008
Сообщений: 10
По умолчанию For loop control variable must be simple local variable

Код:
unit Unit1;

interface

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

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

var
  Form1: TForm1;
  arr:array[1..10] of integer;
  i:integer;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 for i:=1 to 10 do
 begin
  arr[i]:=random(9);
  TForm1.ListBox1.Items.Strings:=TForm1.ListBox1.Items.Strings+IntToStr(arr[i]);
 end;
end;

end.
предупреждение:
Цитата:
[Warning] Unit1.pas(30): For loop control variable must be simple local variable
Помогите разобраться, заранее спасибо.
Hehe вне форума Ответить с цитированием
Старый 12.12.2009, 17:59   #2
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Счетчиком цикла может быть только локальная переменная. Т.е.:
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
 i: byte;
begin
 for i:=1 to 10 do
 begin
  arr[i]:=random(9);
  TForm1.ListBox1.Items.Strings:=TForm1.ListBox1.Items.Strings+IntToStr(arr[i]);
 end;
end;
А из раздела var удалите.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 12.12.2009, 18:13   #3
Hehe
Пользователь
 
Аватар для Hehe
 
Регистрация: 09.12.2008
Сообщений: 10
По умолчанию

Код:
procedure TForm1.FormCreate(Sender: TObject);
var
 i: byte;
begin
 for i:=1 to 10 do
 begin
  arr[i]:=random(9);
  ListBox1.Items.Strings:=ListBox1.Items.Strings+IntToStr(arr[i]);
 end;
end;
Цитата:
[Error] Unit1.pas(34): '[' expected but ':=' found
Hehe вне форума Ответить с цитированием
Старый 12.12.2009, 18:20   #4
Hehe
Пользователь
 
Аватар для Hehe
 
Регистрация: 09.12.2008
Сообщений: 10
По умолчанию

все. разобрался.
Neeter, спасибо
Hehe вне форума Ответить с цитированием
Старый 12.12.2009, 18:54   #5
IT-man
АльTRUEи$т
Форумчанин
 
Аватар для IT-man
 
Регистрация: 19.03.2009
Сообщений: 784
По умолчанию

Цитата:
Счетчиком цикла может быть только локальная переменная.
Нужна локальная переменная,но не обязательна! Имхо!(из моих познаний английского)
Цитата:
«Никто не войдет в Рай, имея хотя бы крупицу гордыни в своем сердце». «Аллах Красив и любит красоту. Гордыня означает отказ от истины и высокомерие»
IT-man вне форума Ответить с цитированием
Старый 12.12.2009, 19:03   #6
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Цитата:
Нужна локальная переменная,но не обязательна! Имхо!(из моих познаний английского)
Что значит не обязательна? Именно, обязательна только локальная переменная для процедуры, в цикле которой она используется.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 12.12.2009, 19:19   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Нет, она может быть объявлена и глобально. И все будет работать.
Просто компилятор предупреждает (warning), что есть опасность того, что в какой-то из процедур эта переменная цикла может быть изменена (поскольку доступна всем процедурам), что приведет к неправильной обработке цикла.
mihali4 вне форума Ответить с цитированием
Старый 12.12.2009, 19:21   #8
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Цитата:
Нет, она может быть объявлена и глобально. И все будет работать.
Просто компилятор предупреждает (warning), что есть опасность того, что в какой-то из процедур эта переменная цикла может быть изменена (поскольку доступна всем процедурам), что приведет к неправильной обработке цикла.
А, да, точно, предупреждение ведь...
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 26.12.2011, 18:22   #9
ZamVessel
Новичок
Джуниор
 
Регистрация: 26.12.2011
Сообщений: 2
По умолчанию

А вот я глобально не описывал, но эта ошибка все равно вылазиет

Код:
 unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    mmo1: TMemo;
    mmo2: TMemo;
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
var a, b:string; i: byte;
begin
a:=(mmo1.Text);
For i=1 to 1000 do
 if a[i]<>'~' then b[i]:=a[i]
 else
  if a[i]='b' then b[i]:='Begin'

end.
Прогу я не дописал но ошибка тут уже есть (
ZamVessel вне форума Ответить с цитированием
Старый 26.12.2011, 18:43   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ТС, вы знаете диапазон значений для типа byte?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка - Run-time error '91' Object variable or With block variable not set Артур Иваныч Microsoft Office Excel 13 12.09.2012 14:18
Вычитание и LOOP lordus Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 14.11.2009 17:20
Undefined variable SPY-FeinD PHP 5 27.05.2009 19:41
Simple Shooter - самая простая стрелялка Манжосов Денис :) Gamedev - cоздание игр: Unity, OpenGL, DirectX 19 05.04.2009 20:10
Assignment to FOR-Loop variable zotox Помощь студентам 4 24.03.2009 11:32