c++ - extern global 似乎会导致链接器错误
问题描述
我遇到一种奇怪的情况,使用全局对象似乎会导致不相关的链接器错误。
我的设置如下:
// 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
文件中声明一个全局,然后以 a 提供定义.cpp
是批准的方式创建全局变量,我做错了什么?
附言
我使用以下标志:
-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
解决方案
推荐阅读
- android - Android NavController:从默认导航图之外的主要活动导航到片段
- node.js - Redis 错误“ReplyError:ERR 值不是整数或超出范围”
- python - np.ones(size, 'd') 'd' 做什么?
- microsoft-graph-api - 无法创建团队
- python - 感染效率 - Pygame
- android - 在扩展函数(kotlin)中传递带参数的函数
- flutter - Flutter 构建面向开发和产品风格的 AAR(构建变体)
- javascript - 在我的反应应用程序上使用 map() 方法时遇到一些问题
- jmeter - Jmeter chrome webdriver - 将pageloadstrategy设置为none
- android - 为什么来自我的 Android WebView 应用程序的流量显示为“直接”?