arduino - 无效使用非静态错误成员函数arduino
问题描述
我正在尝试在另一个库中使用键盘库。但是,我收到“无效使用非静态错误成员函数”错误。我认为将函数更改为静态类型可以解决错误,但是键盘库中的函数不是静态的并且会导致更多错误。
这是没有将功能更改为静态无效的错误
sketch\latch.cpp: In member function 'void latch::begin(int)':
latch.cpp:10:38: error: invalid use of non-static member function
keypad.addEventListener(keypadEvent);
^
exit status 1
invalid use of non-static member function
------------main.ino-------------
#include "latch.h"
latch doorlatch;
void setup(){
doorlatch.begin(9600);
}
void loop(){
doorlatch.main();
}
------------cpp.h 文件------------
#include "latch.h"
#include "Arduino.h"
latch::latch():keypad( makeKeymap(keys), rowPins, colPins, Rows, Cols ) {
}
void latch::begin(int baudrate){
Serial.begin(baudrate);
Serial.println("Latch library created");
keypad.addEventListener(keypadEvent);
}
void latch::main(){
keypad.getKey();
}
void latch::keypadEvent(KeypadEvent input){
switch (keypad.getState()){
case PRESSED:
Serial.print("Enter: ");
Serial.println(input);
delay(10);
}
}
------------h文件-------------
#include <Keypad.h>
#ifndef _latch_
#define _latch_
#if ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
class latch {
public:
latch();
void keypadEvent(KeypadEvent input);
void begin(int baudrate);
void main();
Keypad keypad;
private:
const byte Rows = 4;
const byte Cols = 4;
char keys[4][4] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[4] = {7, 6, 5, 4};
byte colPins[4] = { 11, 10, 9, 8 };
};
#endif
解决方案
功能
class latch {
...
void keypadEvent(KeypadEvent input);
...
};
实际上是一个成员函数,这意味着它被隐式分配latch *this
为附加参数。
为了解决这个问题,将函数设为静态:
class latch {
...
static void keypadEvent(KeypadEvent input);
...
};
或将其声明为类的朋友latch
:
class latch {
...
friend:
void keypadEvent(KeypadEvent input);
};
void keypadEvent(KeypadEvent input)
{
}
我邀请您查阅有关这两个功能的大量在线文档,以了解哪种方法更适合您的用例。
在任何一种情况下,如果latch
包含一些需要更改的有状态信息keypadEvent()
,那么您可能想要使用单例模式。
推荐阅读
- mpi - 让 OpenMp 的每个线程使用一个核心,当被 mpirun 启动时
- python - 如何将区分系列结果从熊猫数据框中的索引 0 添加到另一列?
- r - 我应该如何组织我的数据框以轻松比较特定组并绘制它们?
- mongodb - 是否可以使用 MongoDB 聚合将数组字段转换为行?
- regex - 正则表达式提取特定文本忽略部分结果
- mysql - 获得低于最高价格的所有条目和超过一个条目
- docker - VM 重启后 Docker 容器重启
- javascript - React - 将状态值从一个组件传递到另一个组件
- python - python嵌入,定义新类型,如何在c端创建新实例
- c++ - CMake CUDA C++ 链接错误 - 未定义引用`someFunction()`