一个返回数组的函数,但也将函数作为参数

时间:2013-10-12 19:26:29

标签: c++ arrays function sdl

我正在使用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;
}

忽略碰撞混乱。在我的游戏中,演员是具有xPos,yPos,宽度,高度,速度等的阵列。前四个是渲染的。像“moveActor”或“moveOpposite”这样的函数可以与所有参与者一起使用。 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*))'|

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

1 个答案:

答案 0 :(得分:1)

你的电话需要传递一个功能,因此而不是

*player=*collideWith(player,blueEnemy,*moveOpposite(player));
你可能只需要

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