Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глобальные переменные 
V
    Опции темы
raks123
Дата 22.11.2011, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 2.10.2011

Репутация: нет
Всего: нет



Вопрос такой: как правильно создать глобальную переменную, чтобы её было видно в разных cpp файлах? Знаю, что это плохая практика, но все-таки у меня по другому, даже через самую большую задницу, которую я пытался изобрести не получается(((
PM MAIL   Вверх
bsa
Дата 22.11.2011, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Причем тут кроссплатформенное программирование?
подозреваю, что ты просто не знаешь основ, потому и не получается.
myvar.h
Код
extern int myvar;
myvar.cpp
Код
int myvar;
main.cpp
Код
#include "myvar.h"

int main()
{
   myvar = 10;
}


И еще. Почитай про паттерн программирования singleton.

Это сообщение отредактировал(а) bsa - 22.11.2011, 16:17
PM   Вверх
borisbn
Дата 22.11.2011, 16:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



raks123, расскажи, а лучше расскажи и покажи в коде, про проблему. Интересно, в каком это таком случае невозможно обойтись без глобальных переменных  smile 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
raks123
Дата 22.11.2011, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 2.10.2011

Репутация: нет
Всего: нет



Цитата(borisbn @ 22.11.2011,  16:53)
raks123, расскажи, а лучше расскажи и покажи в коде, про проблему. Интересно, в каком это таком случае невозможно обойтись без глобальных переменных  smile

Он такой страшный, что его стыдно показывать smile, скажу только то, что вся работа идет на считывание таблицы, создания потоков и создания клиентских соединений. У меня не получалось изменять в контейнере со структурой один параметр, настолько важный, что с моими познаниями другого выхода я не вижу.
PM MAIL   Вверх
raks123
Дата 25.11.2011, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 2.10.2011

Репутация: нет
Всего: нет



bsa, может я поконкретней скажу. У меня есть заголовочный файл global.h там содержится:

Код

#include <QMetaType>
#include <QVector>

struct MyStruct{
    QString adress;
    int port;
    bool zanyatost;
    int vremya;
    QString nameScript;
};

class Global
{

public:
static QVector<MyStruct> vector;
static int kolichestvo;

};


Задача такая - мне нужно в отдельном потоке заполнить и вектор и переменную, причем размер вектора я не знаю с самого начала, а сделать это надо в другом классе файла opanbase.cpp и заполнение должно быть такое:

Код

        QSqlQuery query;
        if (!query.exec("SELECT Adress, Port, Vremya, Script "
                                   "FROM baseservise "
                                  "WHERE Active = 'Yes';")) {
        qDebug() << "Unable to execute query - exiting";
        }
        QSqlRecord rec = query.record();
        kolichestvo=0;

        while (query.next()) {
            vector.resize(kolichestvo + 1);
            vector[kolichestvo].adress  = query.value(rec.indexOf("Adress")).toString();
            vector[kolichestvo].port  = query.value(rec.indexOf("Port")).toInt();
            vector[kolichestvo].vremya = query.value(rec.indexOf("Vremya")).toInt();
            vector[kolichestvo].nameScript = query.value(rec.indexOf("Script")).toString();
            vector[kolichestvo].zanyatost=true;
            kolichestvo += 1;
    }


Вот и как тут быть, если мне надо в main.cpp вектор и переменную и еще в одном классе типа QTcpSocket
PM MAIL   Вверх
bsa
Дата 25.11.2011, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



В данном примере, у тебя kolichestvo равна vector.size(). Это нормально? Или можно вместо количества использовать vector.size()?
PM   Вверх
WnAnt
Дата 28.11.2011, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 28.11.2011

Репутация: нет
Всего: нет




Модератор: Сообщение скрыто.

PM MAIL   Вверх
borisbn
Дата 28.11.2011, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



WnAnt, в твоей ссылке
user posted image
данные немного устарели (где-то от 10 до 15 лет).
мало того, что размер (un)signed int не регламентируется стандартом, но то, что он равен 2 байта справедливо для компьютеров-долго-долго-долгожителей. На современных платформах размер int'а 4 или 8 байт.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
_GRIN_
Дата 29.11.2011, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


одинокий падаван
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 18.11.2007
Где: Калуга

Репутация: 6
Всего: 7



raks123, как правильно сказал bsa тебе нужен синглтон
Код

//my_struct.h
#ifndef MY_STRUCT_H
#define MY_STRUCT_H

#include <QMetaType>
#include <QVector>

struct MyStruct{
    QString adress;
    int port;
    bool zanyatost;
    int vremya;
    QString nameScript;

    //данная функция и будет возвращать синглтон вектора.
    static QVector<MyStruct>& vector()
    {
        static QVector<MyStruct> ret_val;
        return ret_val;
    }
};

#endif 


касательно переменной количество bsa тебе верно заметил, что она не нужна =)
В твоём случае использование будет следующее
Код

        QSqlQuery query;
        if (!query.exec("SELECT Adress, Port, Vremya, Script "
                                   "FROM baseservise "
                                  "WHERE Active = 'Yes';"))
        {
            qDebug() << "Unable to execute query - exiting";
        }
        QSqlRecord rec = query.record();
        while (query.next()) {
            MyStruct::vector->append(MyStruct()); // добавляем новый элемент
            MyStruct& last = MyStruct::vector->last(); //берём неконстантую ссылку на последний элемент, который будем изменять.
            last.adress  = query.value(rec.indexOf("Adress")).toString();
            last.port  = query.value(rec.indexOf("Port")).toInt();
            last.vremya = query.value(rec.indexOf("Vremya")).toInt();
            last.nameScript = query.value(rec.indexOf("Script")).toString();
            last.zanyatost=true;
        }


Как-то так =)


--------------------
Дорогу осилит идущий
PM MAIL Skype   Вверх
raks123
Дата 9.12.2011, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 2.10.2011

Репутация: нет
Всего: нет



Всем спасибо за ответы! Спасибо, что хоть такую дурачку ответили smile Все советы пригодились, а по поводу вектора мне переменная количество нужна была когда-то там, а так хоть симпотично смотрится)))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0533 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.