crossplatform.ru

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


  Ответ в Глобальные Static переменные
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
defnull Дата 8.5.2009, 20:18
  Kagami,
Посмотрел ваш пример, у меня мой пример на чистом С++ тоже работает. Вероятно вся проблема в моём случае в компоновке так как высылающий сигнал класс и принимающий в разных cpp файлах... сейчас попробую пошаманить ещё..
DmP
Вы оказались правы=) Фуф ну наконец-то, а то замучался совсем... с другой стороны выявил места в которых мне ещё надо поразбираться..
Всем спасибо за помощь!)
DmP Дата 8.5.2009, 20:12
 
Цитата(defnull @ 8.5.2009, 20:45) *
Добавил в сpp файлы где использую Transac::cre

extern int Transac::cre;


extern пишется в заголовочном файле enum.h:
namespace Transac
{
extern int cre;
};


В одном файле из *.cpp, например, в enum.cpp:
namespace Transac
{
int cre = 3;
};

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

extern int Transac::cre;

Да только воз и ныне там.. что-то я не догоняю=(
DmP Дата 8.5.2009, 19:14
 
Цитата(defnull @ 8.5.2009, 19:52) *
namespace Transac
{
static int cre = 3;
};

Наверное надо добавить extern и инициализацию перенести в .cpp?
defnull Дата 8.5.2009, 18:52
  Доброго времени суток.. натолкнулся на проблему которая просто взорвала мне мозг..
Вообщем есть глобальная переменная определённая в файле 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

Но он работает корректно в отличии от предыдущего =(((
Всё было бы смешно если бы не было так грустно, ибо убил уже дофига времени на всё это =((( з.ы. Весь проект конечно скинуть можно но имхо не имеет смысла.. объёмный ..
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 4.12.2020, 19:26