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

标签 c++ vector

我对 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/

相关文章:

C++将 vector 传递给函数模板

c++ - 将复 vector 展平并将其恢复为双 vector 并返回

c++ - 类析构函数符号有什么问题?在VC++中

c++ - 如何使用 C++ 限制循环中的 FPS?

c++ - 从 vector 中删除特定元素不起作用

c++ - Findcontours() 运行时错误

c++ - 在 Windows 8 上使用 VisualStudio 2012 设置 GLUT

c++ - 我应该创建多个类吗?

c++ - 释放双指针上的内存

c++ - 递归函数中迭代器的段错误