Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2017.02.19;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.002 c
4-1280652219
mc.fly
2010-08-01 12:43
2017.02.19
Как внедрить DLL в процесс передав ей параметры?(для взаимосвязи)


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


2-1433831341
Saha
2015-06-09 09:29
2017.02.19
Является ли строка числом


2-1434614491
pavelnk
2015-06-18 11:01
2017.02.19
Задать размеры StaticText


2-1433843339
pavelnk
2015-06-09 12:48
2017.02.19
Свернуть форму





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский