Определение функции указателя внутри структуры - PullRequest
0 голосов
/ 19 июня 2019

Итак, я пытался написать структуру с указателями на функции, и это то, что я написал

typedef struct Coordinates {
    float x; 
    float y;
} Coord;

typedef struct Parallelograms {
        Coord upperR, lowerL;
        float base;
        float (*areaFunc)(float base, Coord upperR, Coord lowerL);
        float (*perimeter)(float base, Coord upperR, Coord lowerL);
} Parallelogram;

Здесь я определяю функцию:

float area(float base, Coord upperR, Coord lowerL) {
    return (base*(upperR.y-lowerL.y));
}

И затем в какой-то другой функции я называю это так:

Parallelogram para;   
para.areaFunc = area;

Единственное, что я пытаюсь напечатать

printf("Area = %.2f", array[i].area);

(с массивом, являющимся массивом типа параллелограммаобъектов) Возвращает эту ошибку при компиляции:

формат указывает тип 'double', но аргумент имеет тип 'float () (float, Coord, Coord)' (aka 'float () (float, struct Coordinates, struct Coordinates) ') [-Werror, -Wformat] ... printf ("# Area =% .2f # \ n", массив [I] .areaFunc);

Я думал, что правильно понял функции указателя, так как я могу преобразовать функцию указателя в фактическое значение, которое она должна вернуть?

1 Ответ

4 голосов
/ 19 июня 2019

Если array - это массив Parallelogram с:

printf("Area = %.2f", array[i].areaFunc(array[i].base, array[i].upperR, array[i].lowerL));

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

...