CodeInside
@CodeInside

Как создать глобальный объект для всех элементов проекта?

Хочу создать в проекте глобальный вектор. Он нужен для того, чтобы все формы/классы проекта имели доступ к одним и тем же данным. Проблема видна на скриншоте:
1a68970843a34ade8acc697a73912440.png

На скриншоте видно часть кода (само объявление глобальной переменной) файла header.h, который подключаю в файлах, где хочу использовать данный вектор.
  • Вопрос задан
  • 304 просмотра
Пригласить эксперта
Ответы на вопрос 3
@BeardedBeaver
Объявление вектора tasks должно присутствовать в соответствующем cpp файле (технически, в любой другой единице трансляции) помимо extern в h файле на скриншоте. А вообще говоря, есть паттерн "синглтон", он дя этой ситуации куда более феншуен
Ответ написан
Комментировать
@alex-t
Прогр. в команде rco.ru
Ну extern сообщает компилятору, что где-то (в каком-то модуле cpp) этот объект стоит без extern.
Ответ написан
@Ariox41
Вообще, вам стоит почитать про синглтоны в C++, но если лень, самый безопасный вариант - синглтон Майерса:
#include <string>

// Синглтон Майерса. Переменная str будет создана один раз при первом вызове getPrefix, начиная с c++11 это ещё и потокобезопастно.
const std::string& getPrefix(){ 
    static std::string str  {"pref::"}; // Инициализация должна быть в конструкторе. 
    return str;
}

// Его использование.
std::string addPrefix(const std::string& str){
    return getPrefix() + str; 
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы