Delphi. ошибка

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Esgal
Сообщения: 78
Зарегистрирован: 04 ноя 2008, 01:15

Извените, не смог для сообщения более удачного название подобрать.... пишу на делфи, может уже мозг замылился. но в общем такая ошибка


сделанны объявления
[syntax=delphi]
type
DArray=array [0..4] of byte;
{
....
}
var
Form1: TForm1;
name,T,x :D Array;

[/syntax]

Вот реакция нажатия на кнопку
[syntax=delphi]
procedure TForm1.Button1Click(Sender: TObject);
begin
{a} Name[0]:=StrToInt(ComboBox1.text[2]);
{b} Name[1]:=StrToInt(ComboBox2.text[2]);
Name[2]:=StrToInt(ComboBox3.text[2]);
Name[3]:=StrToInt(ComboBox4.text[2]);
Name[4]:=StrToInt(ComboBox5.text[2]);
T[0]:=StrToInt(Edit1.text);
T[1]:=StrToInt(Edit2.text);
T[2]:=StrToInt(Edit3.text);
T[3]:=StrToInt(Edit4.text);
T[4]:=StrToInt(Edit5.text);
Timer1.Enabled:=true;
end;
[/syntax]

в строке "a" ошибка "Element 0 inaccessible - use 'Length' or 'SetLength'
а в строке "b" - "Left side cannot be assigned to"

если это я туплю, покажите где пожалуйста)
Luke! Use the Force! Use the Force... oh, Luke! Stop using the Force, use your head!
Esgal
Сообщения: 78
Зарегистрирован: 04 ноя 2008, 01:15

причём если массив name объявить как локальный параметр, то всё работает
Luke! Use the Force! Use the Force... oh, Luke! Stop using the Force, use your head!
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

Не знаю почему у тебя рабоатет с локальным массивом, а так в строке "a" компилятор ругается, что ты не можешь использовать элемент массива с нулевым индексом.
Нет религии выше истины
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Esgal,
объяснение простое. Твоя ошибка возникает внутри метода класса-наследника TForm, в котором имеется property:
Name: TComponentName;

(TComponentName - это string)

Поэтому компилятор воспринимает идентификатор Name как попытку обратиться именно к элементу данного класса, а не к глобальной переменной.
Объявление же одноименной локальной переменной "перекрывает" поле класса (для обращение к тому следут тогда писать что-то вроде self.Name)

Легко понять, что текст твоей ошибки в строке "a" связан с попыткой обратиться к 0-му элементу переменной типа string.

Выход: если нужна глобальная переменная, измени ее наименование так, чтобы оно не совпадало с именем поля/property/метода класса.
Esgal
Сообщения: 78
Зарегистрирован: 04 ноя 2008, 01:15

всё ясно, спасибо большое...

Имя поменял по наитию ещё вчера. а причину ошибки не понял... теперь понял, спасибо
Luke! Use the Force! Use the Force... oh, Luke! Stop using the Force, use your head!
Ответить