Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Operator not applicable to this operand t [D7]


aik_has ©   (2015-06-17 06:48:00) 

procedure TFAgent.DBGrid1CellClick(Column: TColumn);
var
X:integer;
begin
X :=DBGrid1.SelectedIndex;
if X=3 and D.Agent.State = dsEdit then
  D.AgentDolg_log.AsBoolean:=true;
end;

[Error] Agent.pas(125): Operator not applicable to this operand type


Что не так чтоб выдавала эту ошибку?


Германн   (2015-06-18 01:37:00) [1]


> ouse_ ©   (17.06.15 20:34) [14]
>
>
> > Юрий Зотов ©   (17.06.15 18:21) [12]
> >  но не забывай, что Вирт делал язык обучающий, а не практический.
>
> >  То есть, защищенный от ошибок.
>
> Юрч, ну ты не перегибай - не защищенный от ошибок

Защищенный Сань. Защищенный. Если уже компилятор сообщает об ошибке, значит защищённый.
Но эта защита как любая другая защита не может быть совершенной/абсолютной. Но пусть хотя такая защита!


Ega23   (2015-06-17 21:01:00) [2]


> затрудняющий неопытному программисту их совершить :)


С удовольствием перечитал про "Выстрелить себе в ногу"
http://lurkmore.to/%D0%92%D1%8B%D1%81%D1%82%D1%80%D0%B5%D0%BB%D0%B8%D1%82%D1%8C_%D1%81%D0%B5%D0%B1%D0%B5_%D0%B2_%D0%BD%D0%BE%D0%B3%D1%83


Rouse_   (2015-06-17 20:34:00) [3]


> Юрий Зотов ©   (17.06.15 18:21) [12]
>  но не забывай, что Вирт делал язык обучающий, а не практический.
>  То есть, защищенный от ошибок.

Юрч, ну ты не перегибай - не защищенный от ошибок, а затрудняющий неопытному программисту их совершить :)


Ega23   (2015-06-17 19:54:00) [4]


> Чтобы скобок меньше ставить.


И всё? Неубедительно.
You don't scare me. Work on it! (c)

По-хорошему, надо разносить логические or, not, and, xor и арифметические.
Как присваивание и равенство.


Юрий Зотов   (2015-06-17 18:21:00) [5]

> Rouse_ ©   (17.06.15 17:52) [10]

Не лишила. Есть и побитовый AND, есть и логический AND. Только различаются они не явно, а по контексту (по типу операндов). Возможно, для практики это и не очень удобно, но не забывай, что Вирт делал язык обучающий, а не практический. То есть, защищенный от ошибок. И с этой точки зрения вынужденная простановка скобок - очень малая плата за страховку.


Rouse_   (2015-06-17 17:53:00) [6]

Забыл смайл добавить :)


Rouse_   (2015-06-17 17:52:00) [7]


> Юрий Зотов ©   (17.06.15 17:27) [9]
> Хотя не исключаю, что приоритет операций отношения Вирт
> сделал таким умышленно

Это умышленная шутка лишила нас нет побитового И (&) и логического И (&&).
Поэтому имея на руках, смещенный приоритет операций и приходится извращаться народу:
if (x == 3) & (y > 2) {}
хотя казалось бы:
if x == 3 && y > 2 {}


Юрий Зотов   (2015-06-17 17:27:00) [8]

Хотя не исключаю, что приоритет операций отношения Вирт сделал таким умышленно (вынуждая ставить скобки и, тем самым, делая код более читаемым и менее склонным к ошибкам). Если да, то сделал он это по своему обычаю - просто и красиво.


Юрий Зотов   (2015-06-17 14:21:00) [9]

> icWasya ©   (17.06.15 09:37) [4]

Приоритеты операций отношенияв Delphi действительно странные, но с AND все в порядке. Если операнды арифметические, то и AND считается арифметическим, если логические - то логическим, а если разнотипные - то ошибка.


Юрий Зотов   (2015-06-17 14:15:00) [10]

> Ega23 ©   (17.06.15 10:41) [6]

Чтобы скобок меньше ставить.

if x = 3 and y > 2 then ... // Синтаксическая ошибка
if (x = 3) and (y > 2) then ... // Пришлось поставить скобки


В первом варианте - смешение разнотипных операций:
- сначала арифметическая операция 3 and y
- потом логическая операция x = (3 and y )


Ega23   (2015-06-17 10:41:00) [11]


>  и приоритет у неё выше, чем у операции сравнения


А почему он ниже должен быть?


Игорь Шевченко   (2015-06-17 10:13:00) [12]

Феерично. Народ про ошибки компилятора на форумах спрашивает. До чего довел планету этот фигляр ПЖ!


icWasya   (2015-06-17 09:37:00) [13]

Приоритеты операций в Delphi очень странные. То есть andсчитается арифметической операцией и приоритет у неё выше, чем у операции сравнения. По этому ставь побольше скобок, как в [3].


Ega23   (2015-06-17 07:27:00) [14]


> Что не так чтоб выдавала эту ошибку?

if (X=3) and (D.Agent.State = dsEdit) then


aik_has   (2015-06-17 06:55:00) [15]

Ух ты так работает:

procedure TFAgent.DBGrid1CellClick(Column: TColumn);
var
X:integer;
begin
X :=DBGrid1.SelectedIndex;
if D.Agent.State = dsEdit then
  If X=3 then
  D.AgentDolg_log.AsBoolean:=true;
end;


Почему?


aik_has   (2015-06-17 06:51:00) [16]

D.Agent = TADOQuerty


Наверх

Титульная страница Поиск, карта сайта Написать письмо