gpt4 book ai didi

c++ - 返回数组但也接受函数作为参数的函数

转载 作者:行者123 更新时间:2023-11-28 07:21:52 25 4
gpt4 key购买 nike

我正在使用 SDL 开发个人游戏,我有两个数组:

float player[]={...};
float blueEnemy[]={...};

我还有一个功能:

float *moveOpposite(float *actor) {
// Skipped content.
return actor;
}

然后,我有一个有问题的:

float *collideWith(float *x, float *y, float *(f)(float *a)) {
if ((((x[0]+x[2])>y[0])&&(x[0]<(y[0]+y[2])))&&(((x[1]+x[3])>y[1])&&(x[1]<(y[1]+y[3])))) {
*x = *f(x);
}
return x;
}

忽略碰撞困惑。在我的游戏中, Actor 是具有 xPos、yPos、宽度、高度、速度等的数组。前四个是必需的。诸如“moveActor”或“moveOpposite”之类的函数可以任意作用于所有 Actor 。 collideWith 是这些功能之一。所以,我会解释一下:

它以第一个 actor 和第二个 actor(至少为 4 的数组)作为参数,它还以一个函数作为参数。这个参数函数也接受一个 actor 作为参数并返回它。在 collideWith 函数内部,在测试之后,我用参数函数的结果更新第一个参数,并返回结果。我会这样应用它:

*player=*collideWith(player,blueEnemy,*moveOpposite(player));

当我尝试编译它时,出现了一个可怕的错误:

cannot convert 'float' to 'float* (*)(float*)' for argument '3' to 'float* collideWith(float*, float*, float* (*)(float*))'|

这种将另一个函数作为参数的碰撞函数对我的引擎非常重要。

最佳答案

您的调用需要传递一个函数,因此而不是

*player=*collideWith(player,blueEnemy,*moveOpposite(player));

你可能只是需要

*player=*collideWith(player,blueEnemy,&moveOpposite);

关于c++ - 返回数组但也接受函数作为参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19338277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com