Russian Qt Forum

Программирование => С/C++ => Тема начата: alexlogvinenkoit от Октябрь 14, 2011, 14:02



Название: Проблема и инициализацией глобальных переменных
Отправлено: 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 инициализировать - не выход, т.к. на то она и глобальная, что еще много классов к ней обращаются...

Что может быть?
Спасибо!


Название: Re: Проблема и инициализацией глобальных переменных
Отправлено: Пантер от Октябрь 14, 2011, 14:07
Не используй глобальные переменные. :)


Название: Re: Проблема и инициализацией глобальных переменных
Отправлено: alexlogvinenkoit от Октябрь 14, 2011, 14:10
Супер - неплохой вариант :)
А все-таки... Без них никак, и в обычных сях работает нормально, и в вантузе и в Linux-е...
А вот в Qt... Чего так?


Название: Re: Проблема и инициализацией глобальных переменных
Отправлено: Пантер от Октябрь 14, 2011, 14:11
При чем тут Qt вообще? Ты пишешь на c++ и к Qt твоя проблема не имеет абсолютно никакого отношения.


Название: Re: Проблема и инициализацией глобальных пе&#
Отправлено: Пантер от Октябрь 14, 2011, 14:12
В global.cpp инициализируй.
А вообще, если тебе нужно что-то глобальное, то создай синглтон.


Название: Re: Проблема и инициализацией глобальных переменных
Отправлено: alexlogvinenkoit от Октябрь 14, 2011, 14:40
Спасибо, сработало :)
Шаблоны проектирования еще не учил, но, думаю, разберусь...
Еще раз большое спасибо!


Название: Re: Проблема и инициализацией глобальных переменных
Отправлено: Пантер от Октябрь 14, 2011, 14:49
Все таки советую отказаться от использования глобальных переменных - это плохой подход.