在结构中定义指针函数
Defining a pointer function inside a struct
所以我试图完成编写一个带有指针函数的结构,这就是我写的
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);
(数组为平行四边形对象数组)
编译时return出现这个错误:
format specifies type 'double' but the argument
has type 'float ()(float, Coord, Coord)' (aka 'float ()(float, struct
Coordinates, struct Coordinates)') [-Werror,-Wformat]
...printf("# Area = %.2f #\n", array[I].areaFunc);
我以为我得到了正确的指针函数,那么如何将指针函数转换为它应该 return 的实际值?
如果 array
是 Parallelogram
的数组:
printf("Area = %.2f", array[i].areaFunc(array[i].base, array[i].upperR, array[i].lowerL));
您当前的代码试图将函数指针打印为浮点数,这显然是错误的。您需要调用被指向的函数。
所以我试图完成编写一个带有指针函数的结构,这就是我写的
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);
(数组为平行四边形对象数组) 编译时return出现这个错误:
format specifies type 'double' but the argument has type 'float ()(float, Coord, Coord)' (aka 'float ()(float, struct Coordinates, struct Coordinates)') [-Werror,-Wformat] ...printf("# Area = %.2f #\n", array[I].areaFunc);
我以为我得到了正确的指针函数,那么如何将指针函数转换为它应该 return 的实际值?
如果 array
是 Parallelogram
的数组:
printf("Area = %.2f", array[i].areaFunc(array[i].base, array[i].upperR, array[i].lowerL));
您当前的代码试图将函数指针打印为浮点数,这显然是错误的。您需要调用被指向的函数。