将 typedef 函数指针作为参数传递在 Arduino 1.6.5 中不起作用
passing typedef function pointers as parameter doesn't work in Arduino 1.6.5
我一直在努力解决这个问题。是不是我做错了什么,或者传递 typedef 函数指针作为参数在 Arduino 1.6.5 中不起作用?
我有这个:
typedef int (*arithmeticOperation)(int a, int b);
还有这个:
int multiply(int a, int b){
return a*b;
}
这个有效:
arithmeticOperation result;
result = multiply;
Serial.println(result(5, 2));
如果我有这样的功能:
void printResult(int x, int y, int (*arithmeticOperation)(int, int)){
Serial.println(arithmeticOperation(x, y));
}
这也有效
printResult(5, 3, multiply);
printResult(5, 4, result);
但是有这样的功能:
void test(int x, int y, arithmeticOperation result){
Serial.println(result(x, y));
}
这样称呼:
test(5, 4, multiply);
test(5, 4, result);
不适用于 Arduino 1.6.5。为什么?
编辑:
它不适用于 Arduino IDE 2014 年中期 MacBook Pro 上的 1.6.5 OSX 10.10.5 它使用的编译器版本是 avr-g++ (海湾合作委员会) 4.8.1
这里是 File3.ino,它在 Arduino IDE 1.6.5:
中产生了这个错误
File3.ino:4:25: error: 'arithmeticOperation' has not been declared 'arithmeticOperation' has not been declared
答案:它不适用于 Arduino IDE 1.6.5,但它适用于 Arduino IDE 1.6.6 和 OSX 10.10.5
它不适用于 Arduino IDE 1.6.5 但它适用于 Arduino IDE 1.6.6 和 OSX 10.10.5 都使用 avr-g++ (GCC) 4.8.1
我一直在努力解决这个问题。是不是我做错了什么,或者传递 typedef 函数指针作为参数在 Arduino 1.6.5 中不起作用?
我有这个:
typedef int (*arithmeticOperation)(int a, int b);
还有这个:
int multiply(int a, int b){
return a*b;
}
这个有效:
arithmeticOperation result;
result = multiply;
Serial.println(result(5, 2));
如果我有这样的功能:
void printResult(int x, int y, int (*arithmeticOperation)(int, int)){
Serial.println(arithmeticOperation(x, y));
}
这也有效
printResult(5, 3, multiply);
printResult(5, 4, result);
但是有这样的功能:
void test(int x, int y, arithmeticOperation result){
Serial.println(result(x, y));
}
这样称呼:
test(5, 4, multiply);
test(5, 4, result);
不适用于 Arduino 1.6.5。为什么?
编辑:
它不适用于 Arduino IDE 2014 年中期 MacBook Pro 上的 1.6.5 OSX 10.10.5 它使用的编译器版本是 avr-g++ (海湾合作委员会) 4.8.1
这里是 File3.ino,它在 Arduino IDE 1.6.5:
中产生了这个错误File3.ino:4:25: error: 'arithmeticOperation' has not been declared 'arithmeticOperation' has not been declared