Суть здесь в том, что то, что вы пытаетесь выразить, не может быть возможно выражено одним логическим условием с вложенным в него объявлением alpha
(несмотря на то, что утверждают некоторые другие ответы).
Другие ответы уже объясняли вам, что ваше условие не анализируется так, как вы думаете, оно анализируется, хотя многие ответы допускают явную ошибку, ссылаясь на приоритет оператора =
в условии, тогда как в действительности нет =
оператор там вообще. Правильное объяснение состоит в том, что когда вы объявляете переменную в условии if
, синтаксис является синтаксисом объявления с инициализатором, так что все это анализируется так же, как и
int alpha = value1 - value2 && alpha > 0.001;
будет проанализирован, т. Е. Это объявление int alpha
, инициализированное value1 - value2 && alpha > 0.001
. В нем нет оператора =
. И я надеюсь, теперь вы понимаете, почему компилятор говорит, что вы читаете неинициализированную переменную в выражении инициализатора. Компилятор подаст такую же жалобу на следующее объявление
int alpha = alpha; // reading uninitialized variable
по той же причине.
Чтобы достичь того, что вы буквально пытаетесь выразить, вы должны предварительно объявить alpha
int alpha;
if ((alpha = value1 - value2) && alpha > 0.001) {
// whatever
}
или разделите ваш if
на два
if (int alpha = value1 - value2)
if (alpha > 0.001) {
// whatever
}
Однако, поскольку второе условие уже требует, чтобы alpha
было больше, чем 0
, нет смысла даже проверять первое, поэтому наиболее значимым шагом будет просто уменьшить целое. вещь до
int alpha = value1 - value2;
if (alpha > 0.001) {
// whatever
}
Конечно, как уже отмечалось, сравнение значения int
с 0.001
является допустимым, но довольно странным занятием. Просто сделай
int alpha = value1 - value2;
if (alpha > 0) {
// whatever
}