静态成员函数中的成员使用无效-arduino
我正在尝试将键盘功能调用到我自己的库中。在此之前,我有一个错误“无效使用非静态错误成员函数”,并已将该函数更改为静态函数。但是,由于键盘功能是非静态的,因此仍无法运行 这就是错误所在 我的代码静态成员函数中的成员使用无效-arduino,arduino,Arduino,我正在尝试将键盘功能调用到我自己的库中。在此之前,我有一个错误“无效使用非静态错误成员函数”,并已将该函数更改为静态函数。但是,由于键盘功能是非静态的,因此仍无法运行 这就是错误所在 我的代码 #include "latch.h" latch doorlatch; void setup(){ doorlatch.begin(9600); } void loop(){ doorlatch.main(); } h文件 #include <Keypad.h> #if
#include "latch.h"
latch doorlatch;
void setup(){
doorlatch.begin(9600);
}
void loop(){
doorlatch.main();
}
h文件
#include <Keypad.h>
#ifndef _latch_
#define _latch_
#if ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
class latch {
public:
latch();
void begin(int baudrate);
void main();
static void keypadEvent(KeypadEvent input);
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
有人能帮我解决这个问题吗?或者我应该使用不同的方法?例如将其声明为friend?问题在于您有相互冲突的需求 一方面,通过
addEventListener()
方法添加的回调函数的签名只能是
void keypadEvent(KeypadEvent key);
由于库键盘.h
另一方面,您希望访问实例小键盘在事件侦听器中的类闩锁
内部,但小键盘
不是回调函数的输入参数,也不在全局范围内可见
您有三种可能的选择:
- 子类
类键盘
,并介绍一种新方法,用于添加回调函数,该函数是类闩锁
的成员实例或朋友;或者,也可以是一个函数,它接受对您想要访问的小键盘
对象的引用作为附加参数
- 使用单例模式在全局范围内提供
键盘
的唯一实例,即始终返回对键盘
相同实例的引用的静态工厂方法
后者可能和制造一样容易
`Keypad keypad`
在全局范围内可用,实际上这是一种比其他方法更可取的方法。问题在于您的需求相互冲突
一方面,通过addEventListener()
方法添加的回调函数的签名只能是
void keypadEvent(KeypadEvent key);
由于库键盘.h
另一方面,您希望访问实例小键盘在事件侦听器中的类闩锁
内部,但小键盘
不是回调函数的输入参数,也不在全局范围内可见
您有三种可能的选择:
- 子类
类键盘
,并介绍一种新方法,用于添加回调函数,该函数是类闩锁
的成员实例或朋友;或者,也可以是一个函数,它接受对您想要访问的小键盘
对象的引用作为附加参数
- 使用单例模式在全局范围内提供
键盘
的唯一实例,即始终返回对键盘
相同实例的引用的静态工厂方法
后者可能和制造一样容易
`Keypad keypad`
在全局范围内可用,实际上这是一种比其他方法更可取的方法。如何将其纳入全局范围?我认为在课堂上使用“键盘”可以完成全球范围之外的工作。这在类闩锁的一个实例的作用域中。如何使其成为一个全局作用域?我认为在课堂上使用“键盘”可以完成全球范围之外的工作。这在类闩锁
的实例范围内。