crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

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


Последние 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 Рейтинг@Mail.ru Текстовая версия Сейчас: 5.7.2025, 6:03