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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2015, 10:05   #1
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию Variable inaccessible here due to optimization

Здравствуйте.
Имеется код:
Код:
        w1 := MyImageRect.Right - MyImageRect.Left;
        h1 := MyImageRect.Bottom - MyImageRect.Top;
        w2 := w1+x;
        h2 := h1*(Round(w1/w2));
        x1 := MyImageRect.Left;
        y1 := MyImageRect.Top;
Когда прохожу по нему дебаггером построчно, дебаггер пишет, что Variable w1 inaccessible here due to optimization и не видно, чему равно значение переменной w1.
Как это решить?

Последний раз редактировалось BLACK_RAIN; 12.04.2015 в 10:15.
BLACK_RAIN вне форума Ответить с цитированием
Старый 12.04.2015, 10:23   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Добавьте w3:=w1; и отслеживайте там. Этим мне ООП и не нравится - вроде переменная, а на самом деле свойство. В одних случаях Integer, а в других фиг знает что.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 12.04.2015, 10:42   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Это свойство отладчика, даже {$O-} перед блоком кода не поможет, если переменная дальше в ее области видимости не используется. По крайней мере в Д7. Только искусственные приемы
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.04.2015, 11:39   #4
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Это свойство отладчика, даже {$O-} перед блоком кода не поможет, если переменная дальше в ее области видимости не используется.
Что значит не используется?
BLACK_RAIN вне форума Ответить с цитированием
Старый 12.04.2015, 11:42   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

То и значит - ни где не фигурирует
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.04.2015, 12:00   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

отключить оптимизацию – не помогает?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 12.04.2015, 13:34   #7
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
То и значит - ни где не фигурирует
Переменная? Но я же пользуюсь ей в 3 и 4 строчках.
Цитата:
Сообщение от min@y™ Посмотреть сообщение
отключить оптимизацию – не помогает?
Project > Options > Compiler?
Отключил галочку Optimization - не помогает.
BLACK_RAIN вне форума Ответить с цитированием
Старый 12.04.2015, 13:39   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Переменная? Но я же пользуюсь ей в 3 и 4 строчках.
А после 4-ой? Там и не видно
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.04.2015, 13:40   #9
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Переменная? Но я же пользуюсь ей в 3 и 4 строчках.
Значит компилятор её выкинул до 3 и 4 строчки.
Человек_Борща вне форума Ответить с цитированием
Старый 12.04.2015, 13:49   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Выкинул - значит эти строчки вообще не компилируются, поскольку их результат ни как не влияет на программу. Да, это оптимизатор. Другая ситуация - значение переменной как-то использовано в строке N, а дальше нет. Тогда отладчик её и не видит после строки N. Это все в области видимости переменной. Если её сделать, например, не локальной, а описать в private секции формы, то область видимости все методы формы и отладчик увидит спокойно. Это один из искусственных приемов
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка - Run-time error '91' Object variable or With block variable not set Артур Иваныч Microsoft Office Excel 13 12.09.2012 14:18
Ошибка for loop control variable must be simple local variable 2UnLiMiTeDD Общие вопросы Delphi 8 19.03.2012 16:13
For loop control variable must be simple local variable Hehe Общие вопросы Delphi 11 26.12.2011 19:42
run-time error 91 (object variable or with block variable not set) mrs.petrushina Microsoft Office Access 5 19.04.2011 12:59
run-time error 91 (object variable or with block variable not set) mrs.petrushina Microsoft Office Excel 7 05.04.2011 00:22