Russian Qt Forum
Ноябрь 23, 2024, 08:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема и инициализацией глобальных переменных  (Прочитано 5681 раз)
alexlogvinenkoit
Гость
« : Октябрь 14, 2011, 14:02 »

Доброе время суток!
Не знаю точно, в этот ли раздел писать, но, идея завела сюда...
В приложении много классов, есть глобальные переменные, инициализирую в главном виджете... Но в дочерних виджетах они остуются без инициализации... Переменные статические, volatile не помагает

Код:

//global.h

namespace global
{
    static int value;
}

//MainWidget
class MainWidget : public QWidget...
{
...
    explicit MainWidget(QWidget * parent) : QWidget(parent)
    {
        global::value = 4;
        cw = new ChildWidget(this);
    }
private:
    ChildWidget * cw;
}

//ChildWidget
class ChildWidget : public QWidget
{
...
    explicit ChildWidget(QWidget * parent) : QWidget(parent)
    {
        for(int i = 0; i < global::value; i++)
        { ... }
    }
}

Программа вылетает при запуске, проверил отладчиком - не инициализирована переменная...
В классе ChildWidget инициализировать - не выход, т.к. на то она и глобальная, что еще много классов к ней обращаются...

Что может быть?
Спасибо!
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Октябрь 14, 2011, 14:07 »

Не используй глобальные переменные. Улыбающийся
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
alexlogvinenkoit
Гость
« Ответ #2 : Октябрь 14, 2011, 14:10 »

Супер - неплохой вариант Улыбающийся
А все-таки... Без них никак, и в обычных сях работает нормально, и в вантузе и в Linux-е...
А вот в Qt... Чего так?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Октябрь 14, 2011, 14:11 »

При чем тут Qt вообще? Ты пишешь на c++ и к Qt твоя проблема не имеет абсолютно никакого отношения.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Октябрь 14, 2011, 14:12 »

В global.cpp инициализируй.
А вообще, если тебе нужно что-то глобальное, то создай синглтон.
« Последнее редактирование: Октябрь 14, 2011, 14:26 от Пантер » Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
alexlogvinenkoit
Гость
« Ответ #5 : Октябрь 14, 2011, 14:40 »

Спасибо, сработало Улыбающийся
Шаблоны проектирования еще не учил, но, думаю, разберусь...
Еще раз большое спасибо!
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Октябрь 14, 2011, 14:49 »

Все таки советую отказаться от использования глобальных переменных - это плохой подход.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 23.