我遇到一种奇怪的情况,即使用全局对象似乎会导致不相关的链接器错误。
我的设置如下:
// 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
中的定义是创建全局变量的公认方法,我在做什么错了?
P.S。
我使用以下标志:
-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