我有一个名为 GameObject
的类,我正在尝试将其实例存储到 std::vector
中,该类由 调用
函数。gameObjectList
GameObject
构造函数中的 >push_back
GameObject.h
class GameObject;
static unsigned int gameObjectCount = 0;
namespace {
static std::vector<GameObject> gameObjectList;
}
class GameObject {
public:
Transform transform;
std::string tag;
std::string name;
unsigned int objectID;
bool active = true;
GameObject findGameObject(std::string Name);
std::vector<GameObject> findGameObjectsWithTag(std::string Name);
void Update();
void addComponent(Component component);
Component getComponent(std::string type);
std::vector<Component> getComponents(std::string type) const;
void setActive(bool value);
GameObject(std::string Name = ("GameObject" + gameObjectCount), Transform transform = Transform());
private:
std::vector<Component> mComponents;
};
游戏对象.cpp
#include "../Headers/gameobject.h"
GameObject::GameObject(std::string Name, Transform transform)
{
tag = "default";
name = Name;
objectID = gameObjectCount;
mComponents.push_back(transform);
this->transform = transform;
gameObjectCount++;
gameObjectList.push_back(*this);
}
我将这个头文件包含在我的 engine.cpp
中,我希望能够访问 gameObjectList
来执行以下操作:
Engine.cpp(提取)
#incldue "../Headers/engine.h"
void Engine::run()
{
if (this->init() != 1)
{
std::cout << std::endl << "[SYS] Couldn\'t Initialise Engine" << std::endl;
shutdown();
}
std::cout << std::endl << "[SYS] Engine Completely Initialised!" << std::endl;
mState = EngineState::RUNNING;
while (!glfwWindowShouldClose(mWindow.getWindow()))
{
/*OpenGL stuff here*/
this->update();
std::cout << int(gameObjectList.size()) << std::endl;
for (int x = 0; x < (int)gameObjectList.size(); x++)
gameObjectList[x].Update();
glfwSwapBuffers(mWindow.getWindow());
glfwPollEvents();
}
std::cout << std::endl << "[SYS] !-------------------!" << std::endl;
std::cout << "[SYS] Shutting Down Engine" << std::endl;
std::cout << "[SYS] !-------------------!" << std::endl;
shutdown();
}
(Engine.h 包含 GameObject.h)
我已经触发了断点,试图跟踪它是如何运行的,当我在构造函数中时,它成功地将 GameObject
添加到 std::vector
,但是一旦您离开构造函数,整个 vector 就好像自己删除一样,因为大小和内容都返回到 0
。请帮助我理解我做错了什么,并希望我应该做些什么才能在全局范围内访问这个 vector 。
最佳答案
你没有提供完整的代码,尤其是析构函数的代码。因此我只能猜测你的问题。
下面的代码将游戏对象的拷贝插入 vector 中。我敢肯定,这不是您想要的。
gameObjectList.push_back(*this);
您应该重构您的代码,可能如下所示。
static std::vector<GameObject*> gameObjectList;
// ...
gameObjectList.push_back(this);
UDATE 在 OP 粘贴完整代码之后。
.h 中的匿名命名空间和静态全局是无用的。
namespace { static std::vector<GameObject> gameObjectList; }
它使每个 .cpp 都拥有自己的和不同的 gameObjectList
。在一个 .cpp 中,您将新元素添加到 vector 中,另一个 .cpp 中有自己的空 vector 。
你应该在 .h 中声明 vector
extern std::vector<GameObject*> gameObjectList;
并在其中一个.cpp中定义它
std::vector<GameObject*> gameObjectList;
与其使用 extern
不如将其声明为 static
类成员。
关于c++ - 全局 vector 和 Push_Back,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49595129/