У меня странная ситуация, когда использование глобального объекта может вызвать несвязанные ошибки компоновщика.
Моя настройка выглядит следующим образом:
// globals.h
#ifndef GLOBALS_H
#define GLOBALS_H
class Singleton
{
...
};
extern Singleton* g_object;
#endif
// globals.cpp
#include "globals.h"
Singleton* g_object = new Singleton();
// somefile.cpp
#include "globals.h"
void function()
{
g_object->do_some_stuff();
}
Похоже, что когда я пытаюсь где-то использовать g_object, я получаю много "неопределенных ссылок" от компоновщика, но все они ссылаются на некоторые другие,несвязанные части проекта и не имеют никакого отношения к моему классу или объекту или функциям, которые его используют.
Мне кажется, что я упускаю что-то очевидное, и это как-то портит объекты, но я не могуВыясните, что, насколько я могу судить, объявление глобала в файле .h
и последующее предоставление определения в .cpp
является одобренным способом создания глобалов, что я делаю неправильно?
PS
Я использую следующие флаги: -c -v -Wall -Wno-strict-aliasing -Weffc++ -Woverloaded-virtual -Wshadow -Wuninitialized -fstack-protector -fshort-wchar -fvisibility=hidden -fms-extensions -xc++ -fno-strict-aliasing -std=c++11 -fpermissive -Wno-narrowing -pthread -g -fPI