crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Глобальные Static переменные
defnull
  опции профиля:
сообщение 8.5.2009, 18:52
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 49
Регистрация: 1.5.2008
Пользователь №: 165

Спасибо сказали: 0 раз(а)




Репутация:   1  


Доброго времени суток.. натолкнулся на проблему которая просто взорвала мне мозг..
Вообщем есть глобальная переменная определённая в файле Enums.h :
namespace Transac
{
    static int cre = 3;
};

Есть одна функция класса CommandLoadEditRequest которая заканчивает свою работу так:
        Transac::cre = -1;

    emit doneSuccesfully();
    return true;
}

Тоесть попросту меняет значение этой глобальной переменной и высылает сигнал.
Сигнал сразу же ловится (cсоединён connect(commandLoad, SIGNAL(doneSuccesfully()), this, SLOT(slotCreateRequest())); )

void visualRequestEdit::slotCreateRequest()
{
       qDebug() << ":::::" << Transac::cre;


И выводит мне не -1 а 3!!

Сперва я подумал что просто что-то напутал и набросал простенький пример на чистом с++ дабы проверить как это всё работает по аналогии:
// main
#include "enums.h"
#include "hmm2.h"
#include "hmm.h"
int main(int argc, char *argv[])
{
    int t = 20;
    hm();
    t = DataBase::TA;
    return 0;
}

// enums.h
#ifndef ____nawjefawef
#define ____nawjefawef
namespace DataBase{ static int TA = 4; };
#endif

// hmm.h
#ifndef _awkjrefhl234
#define _awkjrefhl234
#include "enums.h"
#include "hmm2.h"

void hm()
{
    int i = DataBase::TA;
    DataBase::TA = 9;
    hm2();
    return;
}
#endif

// hmm2.h
#ifndef _awkjrefhl
#define _awkjrefhl
#include "enums.h"
void hm2()
{
    int h = DataBase::TA;
    DataBase::TA = -9;
    return;
}
#endif

Но он работает корректно в отличии от предыдущего =(((
Всё было бы смешно если бы не было так грустно, ибо убил уже дофига времени на всё это =((( з.ы. Весь проект конечно скинуть можно но имхо не имеет смысла.. объёмный ..

Сообщение отредактировал defnull - 8.5.2009, 18:53
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
DmP
  опции профиля:
сообщение 8.5.2009, 19:14
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 61
Регистрация: 11.3.2008
Пользователь №: 116

Спасибо сказали: 15 раз(а)




Репутация:   2  


Цитата(defnull @ 8.5.2009, 19:52) *
namespace Transac
{
static int cre = 3;
};

Наверное надо добавить extern и инициализацию перенести в .cpp?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
defnull
  опции профиля:
сообщение 8.5.2009, 19:45
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 49
Регистрация: 1.5.2008
Пользователь №: 165

Спасибо сказали: 0 раз(а)




Репутация:   1  


Мдя =( про exteren-то я и позабыл...
Меня вот только оч смущает почему же на чистом с++ пример работал. Хотя там попытался нечто похожее сделать... Пойду гляну что Страуструп на эту тему пишет..
Добавил в сpp файлы где использую Transac::cre

extern int Transac::cre;

Да только воз и ныне там.. что-то я не догоняю=(

Сообщение отредактировал defnull - 8.5.2009, 19:59
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 16.4.2024, 8:00