Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2018, 13:52   #1
chiffa
Пользователь
 
Регистрация: 03.01.2008
Сообщений: 16
Восклицание Глобальная функция + приватные переменные + вызов из другого класса?

Всем добрый день. Помогите разобраться. Получаю определенные параметры и пытаюсь их сохранить в память. делаю так:

SettGlobals.h

Код:
#include <cstdio>
#include <iostream>
#include <string> 
#include <map>;
 
class SettGlobals
{
    
private:
    std::map<std::string, std::string> Settings;
    
public:
    void SetSettings(std::string, std::string);
    std::string GetSettings(std::string);
};

SettGlobals.cpp

Код:
#include "SettGlobals.h"
 
void SettGlobals::SetSettings(std::string key, std::string val)
{
    Settings.insert(std::pair<std::string, std::string>(key, val));
    
}
 
std::string SettGlobals::GetSettings(std::string key)
{
    return Settings.at(key);
}

и сам main.cpp


Код:
SettGlobals GlobalSett;
 
        GlobalSett.SetSettings("SID", "123");
 
cout << "SID: " << GlobalSett.GetSettings("SID") << endl;
так отрабатывает без проблем. Если же вызываю из другого класса или отбельного потока:

Код:
SettGlobals GlobalSett;
 
        GlobalSett.SetSettings("SID", "123");
 
cout << "SID: " << GlobalSett.GetSettings("SID") << endl;
то получаю ошибку: "terminate called after throwing an instance of 'std:ut_of_range'
what(): map::at
SID: "

подскажите, что делаю не так?... Заранее спасибо
chiffa вне форума Ответить с цитированием
Старый 12.01.2018, 15:01   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

полный код нужен где как SettGlobals прописан и создаётся, как используется.
Скорее всего работаете с разными SettGlobals (записывается элемент в один объект, а читается из другого, где соответственно ничего нет)
pu4koff вне форума Ответить с цитированием
Старый 12.01.2018, 15:33   #3
chiffa
Пользователь
 
Регистрация: 03.01.2008
Сообщений: 16
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
полный код нужен где как SettGlobals прописан и создаётся, как используется.
Скорее всего работаете с разными SettGlobals (записывается элемент в один объект, а читается из другого, где соответственно ничего нет)
так я ж описал... main.cpp добавление элементов:


Код:
#include "SettGlobals.h"
SettGlobals GlobalSett;
 
        GlobalSett.SetSettings("SID", "123");
любой другой класс:

Код:
#include "SettGlobals.h"
SettGlobals GlobalSett;
cout << "SID: " << GlobalSett.GetSettings("SID") << endl;
возвращает ошибку
chiffa вне форума Ответить с цитированием
Старый 12.01.2018, 15:39   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Так в мейне
Код:
SettGlobals GlobalSett;
это один объект, а в другом классе
Код:
SettGlobals GlobalSett;
другой.

Юзайте extern хотя бы или инлайн переменные, если компилятор поддерживает.
p51x вне форума Ответить с цитированием
Старый 12.01.2018, 15:41   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

вот у вас у каждого cpp файла своя переменная GlobalSett (в одну пишете, читаете из другой).
читайте про ключевое слово extern, а лучше вообще отказаться от глобальной переменной.
pu4koff вне форума Ответить с цитированием
Старый 12.01.2018, 15:41   #6
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Или почитайте про pattern singleton
Black Fregat вне форума Ответить с цитированием
Старый 12.01.2018, 15:44   #7
chiffa
Пользователь
 
Регистрация: 03.01.2008
Сообщений: 16
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
а лучше вообще отказаться от глобальной переменной.
а как тогда хранить настройки глобально?
chiffa вне форума Ответить с цитированием
Старый 12.01.2018, 23:46   #8
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от chiffa Посмотреть сообщение
а как тогда хранить настройки глобально?
см #6
_Bers вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как привязать к try (Exception) переменные из другого класса? Оксана33 Общие вопросы по Java, Java SE, Kotlin 2 11.11.2015 13:25
Вызов функции из одного класса кнопкой из другого класса lexflax Qt и кроссплатформенное программирование С/С++ 1 12.12.2014 21:48
Перезагрузка оператора и приватные члены класса. Gundos Общие вопросы C/C++ 4 17.01.2011 18:47
Изменять приватные свойства одного класса внутри другого TwiX Общие вопросы Delphi 15 10.11.2010 20:40
Если в классе объявить объект другого класса,будет ли видно переменные первого класса из объекта второго? TwiX Общие вопросы Delphi 3 15.11.2009 00:54