如何跨多个源文件声明和使用全局外部变量
How to declare and use global external variable across multiple source files?
我想要一个全局变量(对象),我可以随时随地轻松访问。问题是我的源代码有多个共享同一变量的 *.hpp 和 *.cpp 文件!我在这里搜索并找到了类似的问题,但不知何故他们没有解决我的问题。
- 使用关键字 extern 存在未定义的引用错误
- 没有关键字 extern 有多个定义错误
- 在所有 *.cpp 文件中使用关键字 extern 和重新声明 *.cpp 没有关键字 extern 的文件存在多个定义错误
- 关键字 extern 和重新声明仅在一个 *.cpp 文件中没有关键字 extern,变量仅在该 *.cpp 文件中正常工作
GameStateManager.hpp
/// GLOBAL VARIABLES
extern sf::RenderWindow window;
extern sf::Event event;
/// GAME STATES
#include "LogoState.hpp"
class GameStateManager
{
...blah blah blah...
};
游戏状态管理器.cpp
GameStateManager::GameStateManager()
{
window.create(sf::VideoMode(WIDTH, HEIGHT), TITLE, FLAGS);
window.setFramerateLimit(FPS);
gamestatescontainer.emplace_back(new LogoState);
}
标识状态.cpp
ListOfGameStates LogoState::run()
{
while (window.isOpen())
{
window.waitEvent(event);
if (event.type == sf::Event::Closed) window.close();
}
return ListOfGameStates::STATE_EXIT;
}
求求你,帮帮我!
通过声明变量 extern,你对编译器说最终会存在具有这种名称和类型的变量,但你不希望他定义它,所以他只是声明变量。
因此,您还需要在某处定义变量(不带extern关键字),我建议在GameStateManager中执行此操作.cpp因为它们是在GameStateManager.hpp中声明的。
编辑:有了这个,你还需要在LogoState.cpp中包含GameStateManager.hpp。如果你不想这样做,你可以为变量(extern sf::RenderWindow window;
和extern sf::Event event;
编写相同的声明,如果你最终在某个地方实例化它们,它也应该正常工作。
你必须使用全局范围吗? 在这种情况下,您可以这样做:
在<Common.h>
#ifndef GLOBAL_DEFINED_HERE
extern
#endif
int myGlobal;
在一个 cpp 文件中,<SomeFile.cpp>
执行以下操作:
#define GLOBAL_DEFINED_HERE 1
#include <Common.h>
其他地方都只是做
#include <Common.h>
这种方法并不漂亮,而且很笨拙,但它会奏效。 请注意只定义一次GLOBAL_DEFINED_HERE
。 或者,为什么不有一个带有静态成员变量的类呢? 甚至是单身人士,如果那是你的一杯茶?
相关文章:
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 全局外部指针变量在 DLL 中不可见
- 全局变量的循环依赖性与外部说明符
- 如何在命名空间中声明外部全局,然后定义它?
- 将全局外部变量的私有版本与 OpenMP 结合使用
- 在主循环外部多个文件上定义全局变量
- 全局静态变量不"staying defined"函数外部
- 类使用全局外部常量变量,该变量通过内部链接定义
- 关于全局变量的外部声明"C"外部声明
- 全局变量和静态全局变量的外部变量
- 通过写入全局llvm的地址从执行引擎外部初始化全局llvm值有效吗
- 如何跨多个源文件声明和使用全局外部变量
- C 和 C++ 中的静态和外部全局变量
- 何时使用外部链接初始化全局常量,避免静态初始化顺序惨败
- 使用外部的全局变量声明
- 多个源文件中的外部全局变量未解决的链接器错误
- 在运行时定义的C++全局外部常量可用于多个源文件
- C++:全局外部变量"double free or corruption"?
- 是在单个头文件中定义全局(外部)变量更好,还是在它们各自的头文件中更好?
- 交叉初始化全局(外部)变量