我对 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 拷贝。
让它工作:
- 将变量移动到任何 cpp 文件(可能是 globals.cpp)
- 在 globals.h 文件中将此变量声明为 extern
关于c++ - static "global" vector 似乎没有被填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48372982/