gpt4 book ai didi

c++ - static "global" vector 似乎没有被填充

转载 作者:行者123 更新时间:2023-11-28 01:38:09 25 4
gpt4 key购买 nike

我对 C++ 有点陌生,所以我用 SFML 制作了一个简单的游戏。我在头文件中定义了一个静态 vector ,然后应该在运行时用方法填充它。这个想法是这些方法将通过使用该 vector 在每个循环中自动运行。该 vector 在其 Globals.h 中看起来像这样:

static std::vector<std::function<void()>> updateList;

它通过 Globals.cpp 中的结构方法填充,如下所示:

int Globals::AddToUpdateList(std::function<void()> update){
updateList.push_back(update);
return updateList.size();
}

它运行在像这样的子弹或播放器构造函数中以添加相关方法:

Globals globals;
updateIndex = globals.AddToUpdateList([this]() {Update(); });

据我所知,这似乎有效。我可以确认这成功地用一种方法填充了 vector (希望该方法通过了)。

然而,当我循环遍历 main.cpp 中的 vector 时,尽管 vector 被标记为静态并且我已经确认有东西被推送到它,但它的大小似乎为 0。有没有人对我如何解决这个问题有解释和/或建议?提前致谢!

最佳答案

问题是 h 文件中变量的 static 关键字表示“本地编译单元”,因此包含此头文件的每个 cpp 文件都有自己的此 vector 拷贝。

让它工作:

  1. 将变量移动到任何 cpp 文件(可能是 globals.cpp)
  2. 在 globals.h 文件中将此变量声明为 extern

关于c++ - static "global" vector 似乎没有被填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48372982/

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