我想要一个全局变量(对象),我可以随时随地轻松访问它。问题是我的源代码有多个共享相同变量的* .hpp 和 * .cpp文件!我在这里搜索并发现了类似的问题,但不知怎的,他们没有解决我的问题。
GameStateManager.hpp
/// GLOBAL VARIABLES
extern sf::RenderWindow window;
extern sf::Event event;
/// GAME STATES
#include "LogoState.hpp"
class GameStateManager
{
...blah blah blah...
};
GameStateManager.cpp
GameStateManager::GameStateManager()
{
window.create(sf::VideoMode(WIDTH, HEIGHT), TITLE, FLAGS);
window.setFramerateLimit(FPS);
gamestatescontainer.emplace_back(new LogoState);
}
LogoState.cpp
ListOfGameStates LogoState::run()
{
while (window.isOpen())
{
window.waitEvent(event);
if (event.type == sf::Event::Closed) window.close();
}
return ListOfGameStates::STATE_EXIT;
}
拜托,帮助我!
答案 0 :(得分:2)
通过声明变量extern,你会告诉编译器最终会存在这样的名称和类型的变量,但你不想让他定义它,所以他只是声明变量。
因此,你还需要在某处定义变量(不带extern关键字),我建议在GameStateManager.cpp中这样做,因为它们是在GameStateManager.hpp中声明的。
编辑:有了这个,你还需要在LogoState.cpp中包含GameStateManager.hpp。如果您不想这样做,您可以为变量(extern sf::RenderWindow window;
和extern sf::Event event;
编写相同的声明,如果最终在某处将它们实例化,它也应该正常工作。
答案 1 :(得分:1)
你有使用全局范围吗?在这种情况下,您可以这样做:
在<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
一次。或者,为什么没有一个带有静态成员变量的类?或者甚至单身,如果这是你的一杯茶?