我在正确使用 C++ 中的内置和引用时遇到问题。我有一个名为“Entity”的类的实例,它是在 main() 函数中创建的。我还有一个名为“Simulation”的类的实例 Simulation 类有一个名为:addEntity(Entity e) 的函数 我认为将实例传递给这个函数只会创建它的副本,因为 Simulation 类然后使用这个实例来改变是数据。数据更改后,main() 中的实例保持其默认值。
代码:
这是 addEntity 函数:
void Simulation::addEntity(Entity& entity)
{
simulation_entities.push_back(std::reference_wrapper<Entity>{entity});
}
此函数使用 Entity 实例来调用它们的公共函数。
void Simulation::simThread()
{
while(simulation_state == SimulationState::Running)
{
auto start = std::chrono::system_clock::now();
for (int i = 0; i<simulation_entities.size(); i++)
{
Entity e = simulation_entities[i];
e.tick(simulation_entities);
}
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
std::this_thread::sleep_for(simulation_speed - elapsed);
}
}
这是改变实体实例内部变量的tick方法
void Entity::tick(vector<std::reference_wrapper<Entity>> e)
{
std::cout << Entity::x << std::endl;
Entity::x += entity_velocity[0];
x += entity_velocity[0];
y += entity_velocity[1];
z += entity_velocity[2];
std::cout << "after " << Entity::x << std::endl;
}
但是当我在它应该被上面的代码编辑之后尝试使用实例时,它仍然保留它的默认值......