函数解释令人困惑
Confusing regarding function interpretation
我正在尝试将 4x4 键盘与 TFT 显示器连接起来。我想实现一个键盘事件侦听器,以便在每次按下键时加载适当的屏幕。事件侦听器将跟踪当前加载的屏幕,并将侦听特定的键输入。
键盘事件侦听器已定义(并将在我的主要 arduino 草图中的 setup() 函数中调用(我使用的是 Atmel Studio + Visual muicro arduino 插件。代码是用 C++ 编写的):
void Keypad_apiClass::createKeypadEventHandler(void)
{
keypad44.addEventListener(screenState_keyHandler);
}
screenState_keyHandler
是这样定义的:
void screenState_keyHandler(KeypadEvent keyPressed)
{
switch(Display_api.screenDisplayID)
{
case 0x0A: //menu screen
switch(keyPressed)
{
case '1':
//go to sensor readings screen
break;
case '2':
//go to system settings screen
break;
case '#':
//go to systemReboot screen
break;
default:
//do nothing
break;
}
break;
default:
break;
}
}
当我查看函数的原型时 addEventListener
(在声明它的头文件中,我看到:
void addEventListener(void (*listener)(char));
我无法理解原型的参数。它需要一个函数指针还是什么?有人可以解释一下上面原型中的参数吗?
当我编译时,我得到
Compiling 'adutoSecuritySystem' for 'Arduino Mega w/ ATmega2560 (Mega 2560)'
keypad_api.cpp:In member function 'void Keypad_apiClass::createKeypadEventHandler()'
keypad_api.cpp:112:50: error: no matching function for call to 'Keypad::addEventListener(<unresolved overloaded function type>)'
keypad_api.cpp:candidate is
Keypad.h:addEventListener(void (*)(char))
Keypad.h:no known conversion for argument 1 from '<unresolved overloaded function type>' to 'void (*)(char)'
Error compiling
这就是我困惑的原因!该函数唯一存在的其他地方是 class:
的成员声明
class Keypad_apiClass
{
protected:
public:
void init();
char retrieveKeyPressed(void);
char waitAndRetrieveKeyPressed(void);
uint8_t returnKeyPressed_IntVersion(char keyPressed);
void createKeypadventHandler(void);
void screenState_keyHandler(KeypadEvent keyPressed);
};
是的,它是一个函数指针
void (*listener) (char)
^return type ^function name ^argument type
所以它是一个名为 listener
的函数,它接受一个 char
参数并且没有 return 值。
您的 screenState_keyHandler
符合此签名。
void screenState_keyHandler(KeypadEvent keyPressed)
它没有 return,我假设 KeypadEvent
是类型定义 char
我正在尝试将 4x4 键盘与 TFT 显示器连接起来。我想实现一个键盘事件侦听器,以便在每次按下键时加载适当的屏幕。事件侦听器将跟踪当前加载的屏幕,并将侦听特定的键输入。
键盘事件侦听器已定义(并将在我的主要 arduino 草图中的 setup() 函数中调用(我使用的是 Atmel Studio + Visual muicro arduino 插件。代码是用 C++ 编写的):
void Keypad_apiClass::createKeypadEventHandler(void)
{
keypad44.addEventListener(screenState_keyHandler);
}
screenState_keyHandler
是这样定义的:
void screenState_keyHandler(KeypadEvent keyPressed)
{
switch(Display_api.screenDisplayID)
{
case 0x0A: //menu screen
switch(keyPressed)
{
case '1':
//go to sensor readings screen
break;
case '2':
//go to system settings screen
break;
case '#':
//go to systemReboot screen
break;
default:
//do nothing
break;
}
break;
default:
break;
}
}
当我查看函数的原型时 addEventListener
(在声明它的头文件中,我看到:
void addEventListener(void (*listener)(char));
我无法理解原型的参数。它需要一个函数指针还是什么?有人可以解释一下上面原型中的参数吗?
当我编译时,我得到
Compiling 'adutoSecuritySystem' for 'Arduino Mega w/ ATmega2560 (Mega 2560)'
keypad_api.cpp:In member function 'void Keypad_apiClass::createKeypadEventHandler()'
keypad_api.cpp:112:50: error: no matching function for call to 'Keypad::addEventListener(<unresolved overloaded function type>)'
keypad_api.cpp:candidate is
Keypad.h:addEventListener(void (*)(char))
Keypad.h:no known conversion for argument 1 from '<unresolved overloaded function type>' to 'void (*)(char)'
Error compiling
这就是我困惑的原因!该函数唯一存在的其他地方是 class:
的成员声明class Keypad_apiClass
{
protected:
public:
void init();
char retrieveKeyPressed(void);
char waitAndRetrieveKeyPressed(void);
uint8_t returnKeyPressed_IntVersion(char keyPressed);
void createKeypadventHandler(void);
void screenState_keyHandler(KeypadEvent keyPressed);
};
是的,它是一个函数指针
void (*listener) (char)
^return type ^function name ^argument type
所以它是一个名为 listener
的函数,它接受一个 char
参数并且没有 return 值。
您的 screenState_keyHandler
符合此签名。
void screenState_keyHandler(KeypadEvent keyPressed)
它没有 return,我假设 KeypadEvent
是类型定义 char