У меня есть заголовок ...Global станд :: вектор не сохраняя данные
Components.h
namespace ComponentManager
{
void InitializeComponents(std::size_t numComponents);
void AddComponent(const Component& c, std::size_t position);
std::vector<Component> GetComponents();
}
... и реализации:
Components.cpp
#include "Components.h"
std::vector<ComponentManager::Component> components;
void ComponentManager::InitializeComponents(std::size_t numComponents)
{
components.resize(numComponents, Component());
}
void ComponentManager::AddComponent(const Component& c, std::size_t pos)
{
components[pos] = c;
}
std::vector<ComponentManager::Component> ComponentManager::GetComponents()
{
return components;
}
В main.cpp, я удостоверяюсь, чтобы инициализировать вектор компонентов, и я добавляю несколько компонентов. После отладки каждого вызова AddComponent (...) я вижу, что компоненты фактически хранятся в векторе. Однако, когда я вызываю GetComponents(), возвращаемый вектор отличается, как будто компоненты никогда не сохранялись.
Что мне не хватает?
EDIT: Добавление main.cpp (внутри основная() функция)
//Inside EntityManager::Initialize(), I call ComponentManager::InitializeComponents()
EntityManager::Initialize(5000);
for (unsigned int i = 0; i < 10; ++i)
{
uint16_t handle = EntityManager::CreatePlayer(static_cast<float>(i), 50.0f * i);
//Inside EntityManager::AddComponent, I call ComponentManager::AddComponent(..)
EntityManager::AddComponent(handle, ComponentManager::POSITION_COMPONENT | ComponentManager::RENDERABLE_COMPONENT);
}
auto components = ComponentManager::GetComponents(); //this vector does not contain the elements that were added.
Вы говорите «в main.cpp», но на самом деле вы имеете в виду функцию «main» или конструктор глобального объекта в "main.cpp"? Потому что, если это последний, это порядок инициализации, и у нас недавно был точно такой же вопрос. –
Что такое 'Компонент'? –
Почему вы не публикуете содержимое 'main.cpp'? Они очень важны для ответа на ваш вопрос. – Quentin