c++ - 函数解释令人困惑

标签 c++ events arduino

我正在尝试将 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 的原型(prototype)时(在声明它的头文件中,我看到了这个:

void addEventListener(void (*listener)(char));

我无法理解原型(prototype)的参数。它需要一个函数指针还是什么?有人可以解释一下上面原型(prototype)中的参数吗?

当我编译时,我得到

    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 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 参数并且没有返回值。

您的screenState_keyHandler 符合此签名。

void screenState_keyHandler(KeypadEvent keyPressed)

它没有返回值,我假设 KeypadEvent 是一个类型定义的 char

关于c++ - 函数解释令人困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31318323/

相关文章:

android - 使用 HC-05 将连续数据从 arduino 发送到 Android 应用程序

c++ - 如何在 std::vector<strings> 中查找重复项并返回按字母顺序排序的 std::list,结果列表中没有重复项

c++ - switch 语句中第一个 case 之前的代码

c# - 强事件和弱事件

javascript - 为什么 "this"不等于调用该函数的对象?

javascript - <span>s inside <a> 不要在 Chrome 中触发 "onclick"事件

node.js - 在使用nodejs时,如何读取从arduino获取的特定缓冲区数据?

c - 有没有办法查询串口可用的数据量?

c++ - 对于嵌套模板,什么时候 `>>` 成为标准 C++(而不是 `>>` )?

python - 仅使用一张深度图像的 OpenCV 视差图后过滤