Функция, которая возвращает массив, но также принимает функцию в качестве параметра

0

Я работаю над личной игрой с 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 является одной из этих функций. Итак, я объясню это:

Он принимает первого актера и второго актера (которые представляют собой массивы с размером не менее 4) в качестве параметров, а также выполняет функцию в качестве параметра. Эта аргумент-функция также принимает актера в качестве аргумента и возвращает его. Внутри функции collideWith после теста я обновляю первый аргумент с результатом аргумент-функции и возвращаю результат. Я бы применил его так:

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

Когда я пытаюсь скомпилировать его, я получаю ужасную ошибку:

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

Эта функция столкновения, которая принимает другую функцию в качестве аргумента, действительно важна для моего движка.

Теги:
arrays
function
sdl

1 ответ

1
Лучший ответ

Ваш вызов должен передать функцию, следовательно, вместо

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

вам просто нужно

*player=*collideWith(player,blueEnemy,&moveOpposite);
  • 0
    Работало красиво! Большое спасибо! В самом деле! Вы можете далеко продвинуться без полного понимания хаоса указателей, но в подобных ситуациях вы понимаете, что вам нужно изучить его, ха-ха.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню