Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 29.05.2020
Сообщений: 78

Почему не присваивается значение переменной status типа ProductState (это я enum прописывал)

29.05.2020, 18:10. Показов 1393. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В конструкторе класса Product в зависимости от температуры в поле статус устанавливается одно из 3 значений, которые определены enum. В нужный if заходит, но что до, что после стоит одно значение. В чём проблема?

C++
1
2
3
4
5
6
if (temp < tempMin)
        ProductState status = ProductState::Frostbitten;
    else if (temp > tempMax)
        ProductState status = ProductState::Overheated;
    else
        ProductState status = ProductState::Normal;
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.05.2020, 18:10
Ответы с готовыми решениями:

Почему переменной не присваивается значение?
Столкнулся в программе с необъяснимой ошибкой - в строке 94 ячейке массива не присваивается значение: program ServerLife; uses...

Почему переменной не присваивается суммовое значение
Range(&quot;D1&quot;).Formula = &quot;=COUNT(B2:B1000)&quot; Range(&quot;E1&quot;).Formula = &quot;=SUM(C2:C1000)&quot; Dim e As Long Dim y As Long Dim x As...

Присваивает переменной не то значение (при x=y=z=0, n=4, но почему-то переменная a, которой присваивается n + 0,006 )
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;locale.h&gt; #include &lt;math.h&gt; int main() { setlocale(LC_ALL, &quot;Rus&quot;); float...

9
0 / 0 / 0
Регистрация: 29.05.2020
Сообщений: 78
29.05.2020, 18:17  [ТС]
Дополню скринами из дебагера, для полной ясности ситуации.
Миниатюры
Почему не присваивается значение переменной status типа ProductState (это я enum прописывал)   Почему не присваивается значение переменной status типа ProductState (это я enum прописывал)   Почему не присваивается значение переменной status типа ProductState (это я enum прописывал)  

0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
29.05.2020, 18:21
Цитата Сообщение от Ogurechik Посмотреть сообщение
ProductState status = ProductState::Frostbitten;
Это инициализация локального объекта, который сразу же умирает в конце выражения if
0
El. Psy. Congroo.
 Аватар для Mightsoul
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
29.05.2020, 18:22
status деинициализируется при выходе из области видимости условного оператора, так как он имеет локальную продолжительность жизни.
0
151 / 103 / 49
Регистрация: 21.11.2019
Сообщений: 285
29.05.2020, 18:22
лучше код полностью покажи, а то не понятно где что куда чего
0
0 / 0 / 0
Регистрация: 29.05.2020
Сообщений: 78
29.05.2020, 18:42  [ТС]
Это файлы реализации, описание класса не стал вставлять.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include "Product.h"
#include "Bag.h"
 
Product::Product(const string& _name, double _mass, double _temp, double _tempMax, double _tempMin, double _heatCapasity) :
    name{ _name }, tempMin{ _tempMin }, tempMax{ _tempMax }
{
    if (_mass > 0)
        mass = _mass;
    else
        throw invalid_argument("Некорректное значение массы!!! ");
 
    if (_temp > 0)
        temp = _temp;
    else 
        throw invalid_argument("Значение температуры не может быть меньше абсоютного 0 !!! ");
 
    if (_heatCapasity > 0)
        heatCapasity = _heatCapasity;
    else
        throw invalid_argument("Некорректное значение теплоёмкости продукта!!! ");
    
    if (temp < tempMin)
        ProductState status = ProductState::Frostbitten;
    else if (temp > tempMax)
        ProductState status = ProductState::Overheated;
    else
        ProductState status = ProductState::Normal; 
}
 
 
void Product::change_status() {
    if (temp > tempMax)
        status = ProductState::Overheated;
    else {
        if (temp < tempMin) status = ProductState::Frostbitten;
        else status = ProductState::Normal;
    }
}
 
double Product::getMaxTemp() const {
    return tempMax;
}
 
double Product::getMinTemp() const {
    return tempMin;
}
 
double Product::getTemp() const {
    return temp;
}
 
Product::ProductState Product::getStatus() const {
    return status;
}
 
string Product::getName() const {
    return name;
}
 
 
 
double Product::getMass() const {
    return mass;
}
 
double Product::getHeatCapasity() const {
    return heatCapasity;
}
 
 
void Product::setTemp(double temp, Product::ProductState state) {
    this->temp = temp;
    if (state == ProductState::Normal)
        change_status();
}
И данный класс используется в другом

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include "Bag.h"
#include "Product.h"
#include <algorithm>
 
void Bag::addProduct(const Product& product) {
    bag.push_back(product);
 
    tempBag = tempBag + (product.getHeatCapasity() * product.getMass() * product.getTemp()) / summHCM();
    countBadProducts = 0;
 
    for (int i = 0; i < bag.size(); i++) {
        bag[i].setTemp(tempBag,bag[i].getStatus());
        if (bag[i].getStatus() != Product::ProductState::Normal)
            countBadProducts++;
        
    }
    
} 
 
double Bag::summHCM() {
    sumHCM = sumHCM + bag[countSummHCM].getHeatCapasity() * bag[countSummHCM].getMass();
    countSummHCM++;
    return sumHCM;
}
 
void Bag::delProduct(int delNumber) {
    countSummHCM--;
    sumHCM = sumHCM - bag[delNumber].getMass() * bag[delNumber].getHeatCapasity();
 
    if (bag[delNumber].getTemp() > bag[delNumber].getMaxTemp() || bag[delNumber].getTemp() < bag[delNumber].getMinTemp());
        countBadProducts--;
 
    bag.erase(bag.begin() + delNumber); 
}
 
void Bag::getInfoProduct(int infoNumber) const {
    cout << "1) Название продукта: " << bag[infoNumber].getName() << endl;
    cout << "2) Масса продукта: " << bag[infoNumber].getMass() << " кг" << endl;
    cout << "3) Текущая температура продукта: " << bag[infoNumber].getTemp() << " oC"<< endl;
    cout << "4) Максимально допустимая температура продукта: " << bag[infoNumber].getMaxTemp() << " oC"<< endl;
    cout << "5) Минимально допустимая температура продукта: " << bag[infoNumber].getMinTemp() << " oC" << endl;
    cout << "6) Теплоёмкость продукта: " << bag[infoNumber].getHeatCapasity() << " Дж/(кг*оС)" << endl;
    Product::ProductState status = bag[infoNumber].getStatus();
    switch (status)
    {
    case Product::ProductState::Normal: cout << "7) Состояние продукта: " << "Нормальное";
        break;
    case Product::ProductState::Overheated: cout << "7) Состояние продукта: " << "Перегрет";
        break;
    case Product::ProductState::Frostbitten: cout << "7) Состояние продукта: " << "Переморожен";
        break;
    default: cout << "7) Ничего не присвоилось"; 
    }
} 
 
int Bag::testProductStatus() {
    int stateProduct;
    Product::ProductState status = bag[bag.size()-1].getStatus();
    switch (status)
    {
    case Product::ProductState::Normal: stateProduct = 1;
        break;
    case Product::ProductState::Overheated: stateProduct = 2;
        break;
    case Product::ProductState::Frostbitten: stateProduct = 3;
    }
    return stateProduct;
}
 
double Bag::getMassBag() const {
    double massBag = 0;
    for (int i = 0; i < bag.size(); i++)
        massBag += bag[i].getMass();
    return massBag;
} 
 
int Bag::getCountProduct() const {
    if (bag.empty()) {
        puts("Сумка пустая!");
    }
    else 
        return bag.size();  
} 
 
void Bag::setMaxMassBag(double maxMassBag){
    if (maxMassBag > 0) {
        this->maxMassBag = maxMassBag;
 
    }
    else
        throw invalid_argument("Некорректное значение массы сумки!");
}
 
double Bag::getMaxMassBag() const {
    return maxMassBag;
}
 
void Bag::listProducts() {
    for (int i = 0; i < bag.size(); i++)
        cout << i + 1 << ") " << bag[i].getName() << endl;
}
 
double Bag::getTempBag() const {
    return tempBag;
} 
 
void Bag::clearBag() {
    countBadProducts = 0;
    bag.clear();
} 
 
int Bag::getCountBadProduct() const{
    return countBadProducts;
}
 
void Bag::delLastProduct() {
    bag.pop_back();
}
Добавлено через 3 минуты
zayats80888, по моей задумке этот объект создаётся и передаётся в вектор. Со всем остальными параметрами всё нормально. Только с переменной status такая штука. Я скинул код полный, не подскажете как исправить ?)

Добавлено через 3 минуты
Код скинул выше, чекни, если не сложно )
0
El. Psy. Congroo.
 Аватар для Mightsoul
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
29.05.2020, 18:45
Тебе же уже ответили, объяви status вне блоков условных операторов.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
29.05.2020, 18:45
Цитата Сообщение от Ogurechik Посмотреть сообщение
описание класса не стал вставлять.
И зря. Если задача присвоить значение полю с именем status, то это и нужно делать
C++
1
2
3
4
5
6
if (temp < tempMin)
    status = ProductState::Frostbitten;
else if (temp > tempMax)
    status = ProductState::Overheated;
else
    status = ProductState::Normal;
0
El. Psy. Congroo.
 Аватар для Mightsoul
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
29.05.2020, 18:47
Лучший ответ Сообщение было отмечено Ogurechik как решение

Решение

C++
1
2
3
4
ProductState status;
if (temp < tempMin) status = ProductState::Frostbitten;
else if (temp > tempMax) status = ProductState::Overheated;
else status = ProductState::Normal;
0
0 / 0 / 0
Регистрация: 29.05.2020
Сообщений: 78
29.05.2020, 18:52  [ТС]
Так у меня эта переменная создана в описании класса, в private секции

Добавлено через 2 минуты
Понял свою ошибку, спасибо большое. Сори за такую тупость, только учусь )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.05.2020, 18:52
Помогаю со студенческими работами здесь

Значение присваивается переменной, но не присваивается TexBox
есть функция public static void ControllerInfo(string name, ref string customer, ref int addres) которая возвращяет ссылку на переменную,...

Почему переменной присваивается произвольное значение("мусор")?
Мой черновой вариант кода. Он очень черновой так что многое не суть важно, но переменной х я присваиваю значение 0. Если после приглашения...

Переменной не присваивается значение
Два обработчика клика. По первому переменной a1 должно присвоиться значение &quot;1&quot; (по умолчанию оно &quot;0&quot;), по второму оно...

Переменной $id не присваивается значение
Не работает оператор IF (10 строка). При запуске страницы отображаются ссылки, при нажатии на которые должна отобразиться форма, переменной...

Не присваивается значение переменной
private void button1_Click(object sender, EventArgs e) { double OhmMMcl=0; double OhmMMst=0; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru