gpt4 book ai didi

c++ - 如何跨多个源文件声明和使用全局外部变量?

转载 作者:行者123 更新时间:2023-11-28 00:19:26 24 4
gpt4 key购买 nike

我想要一个可以随时随地轻松访问的全局变量(对象)。问题是我的源代码有多个共享同一个变量的 *.hpp *.cpp 文件!我在这里搜索并发现了类似的问题,但不知何故它们并没有解决我的问题。

  • 关键字extern存在 undefined reference 错误
  • 没有关键字extern存在多个定义错误
  • 关键字extern所有 *.cpp 文件中的重新声明 *.cpp 文件没有关键字extern> 有多个定义错误
  • With关键字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...
};

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;
}

请帮帮我!

最佳答案

通过声明变量extern,你告诉编译器最终会存在这样的名称和类型的变量,但你不想让他定义它,所以他只是声明变量。

因此,您还需要在某处定义变量(不带 extern 关键字),我建议在 GameStateManager.cpp 中进行定义,因为它们是在 GameStateManager.hpp 中声明的。

编辑:有了这个,您还需要在 LogoState.cpp 中包含 GameStateManager.hpp。如果你不想这样做,你可以只为变量(extern sf::RenderWindow window;extern sf::Event event; 编写相同的声明,和如果您最终在某个地方实例化它们,它也应该可以正常工作。

关于c++ - 如何跨多个源文件声明和使用全局外部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28297278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com