Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

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

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, 16:01   #2
pu4koff
Профессионал
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,616
Репутация: 3613
По умолчанию

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

Цитата:
Сообщение от 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, 16:39   #4
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 11,553
Репутация: 1916

icq: 216409213
По умолчанию

Так в мейне
Код:

SettGlobals GlobalSett;

это один объект, а в другом классе
Код:

SettGlobals GlobalSett;

другой.

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

вот у вас у каждого cpp файла своя переменная GlobalSett (в одну пишете, читаете из другой).
читайте про ключевое слово extern, а лучше вообще отказаться от глобальной переменной.
__________________
http://coub.com/view/2hhtg
pu4koff вне форума   Ответить с цитированием
Старый 12.01.2018, 16:41   #6
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 902
Репутация: 627
По умолчанию

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


23:12.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru