问题定义
这个报错的原因是函数指针类型不匹配。
具体来说,代码中定义了一个函数指针变量,它的类型是 int(*)(int,int),但是在赋值时,右侧的函数类型是 void(*)(int,int),两个类型不匹配,导致编译器报错。
问题解决
方法一
需要让左右两侧的函数类型匹配。可以通过定义一个中间函数,将右侧函数的参数转换成左侧函数需要的参数类型,同时将右侧函数的返回值类型转换成左侧函数需要的返回值类型,然后将中间函数的函数名(指针)赋值给左侧函数指针变量。例如:
// 转换参数类型,并调用左侧函数需要的参数类型
int setPinValue_translate(int pin, int value){
setPinValue(pin, value); // 返回类型为void
return 1; //可以自己支配返回值
}
// 将中间函数的指针赋值给左侧函数指针变量
gpio_set_val_ptr = setPinValue_translate; //返回类型为int
即可解决函数指针类型不匹配的问题
方法二
更加彻底的解决方法就是,通过调整函数指针的返回值类型和参数类型和目标函数一致,让函数指针在赋值时,右侧的函数类型和其类型匹配
// 此时应该确保 函数指针的类型也为 void (*) (int ,int) 和
// 目标函数 void (*)(int ,int) 一致
gpio_set_val_ptr = setPinValue;
同样可以解决函数指针类型不匹配的问题
编译后警告解除,完结撒花!!!