Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.02.19;
Скачать: CL | DM;

Вниз

Operator not applicable to this operand t   Найти похожие ветки 

 
aik_has   (2015-06-17 06:48) [0]

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


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


 
aik_has   (2015-06-17 06:51) [1]

D.Agent = TADOQuerty


 
aik_has   (2015-06-17 06:55) [2]

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

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;


Почему?


 
Ega23 ©   (2015-06-17 07:27) [3]


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

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


 
icWasya ©   (2015-06-17 09:37) [4]

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


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

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


 
Ega23 ©   (2015-06-17 10:41) [6]


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


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


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

> 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 )


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

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

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


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

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


 
Rouse_ ©   (2015-06-17 17:52) [10]


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

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


 
Rouse_ ©   (2015-06-17 17:53) [11]

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


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

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

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


 
Ega23 ©   (2015-06-17 19:54) [13]


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


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

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


 
Rouse_ ©   (2015-06-17 20:34) [14]


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

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


 
Ega23 ©   (2015-06-17 21:01) [15]


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


С удовольствием перечитал про "Выстрелить себе в ногу"
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


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


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

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



Страницы: 1 вся ветка

Текущий архив: 2017.02.19;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.005 c
3-1312306847
Артем
2011-08-02 21:40
2017.02.19
Удаление TADOConnection в потоке


2-1434517633
Staziah2
2015-06-17 08:07
2017.02.19
Добавление цветных ячеек в wwDBGrid


2-1434512890
aik_has
2015-06-17 06:48
2017.02.19
Operator not applicable to this operand t


2-1433923032
pavelnk
2015-06-10 10:57
2017.02.19
VertScroolBar формы


2-1432793155
Zheksonz
2015-05-28 09:05
2017.02.19
Сортировка DBGridEh