问题描述
我有一个简单的函数,它包含一个b2World和b2Body *,在此该对象应该下落直到它与一个接地盒碰撞(已经在main()中创建)
代码本质上如下:
void snake::update(b2World world,b2Body* snake)
{
bool running = true;
Clock deltaClock;
Time deltaTime;
while (running)
{
deltaTime = deltaClock.getelapsedtime();
deltaClock.restart();
world.Step(deltaTime.asSeconds(),6,2);
position = snake->GetPosition();
char ch;
if (_kbhit())
{
ch = _getch();
if (ch == 'x')
{
running = false;
}
}
}
}
此代码最初在main()中实现,并且工作正常。但是,当我尝试将其移至单独的类中的自身函数时,冲突不再起作用...我不知道为什么,因为它实际上是复制/粘贴的,只是围绕变量名进行更改以适合参数...
我不知道出了什么问题,如果您需要任何其他信息,我很乐意提供。
谢谢。
解决方法
基本上是在原始函数头中按值传递b2World
对象之前设置参数的方式。
void snake::update(b2World world,b2Body* snake)
这意味着您正在创建一个副本,并且如果此副本被修改,则传递给该函数的原始对象将保持不变。在类型之后加上&
,您现在可以按引用传递对象。
void snake::update(b2World& world,b2Body* snake)
这意味着不会创建任何副本,而是该函数可与原始对象一起使用,因此更改也会对其产生影响。
因此,当您使用此循环之前,它可能嵌套在您的main
函数或任何其他函数中,并且可以修改在该作用域中声明的原始变量world
。现在,将其移至单独的函数中,您必须告诉编译器您要使用原始对象。