非静态错误成员函数arduino的使用无效

非静态错误成员函数arduino的使用无效,arduino,Arduino,我正在尝试使用另一个库中的键盘库。但是,我得到了一个“无效使用非静态错误成员函数”错误。我认为将功能更改为静态类型可以解决错误,但键盘库中的功能不是静态的,并且会导致更多错误 这是在不将函数更改为static void的情况下发生的错误 sketch\lack.cpp:在成员函数“void-lack::begin(int)”中: latch.cpp:10:38:错误:非静态成员函数的使用无效 键盘。addEventListener(键盘事件); ^ 退出状态1 非静态成员函数的使用无效 ---

我正在尝试使用另一个库中的键盘库。但是,我得到了一个“无效使用非静态错误成员函数”错误。我认为将功能更改为静态类型可以解决错误,但键盘库中的功能不是静态的,并且会导致更多错误

这是在不将函数更改为static void的情况下发生的错误

sketch\lack.cpp:在成员函数“void-lack::begin(int)”中:
latch.cpp:10:38:错误:非静态成员函数的使用无效
键盘。addEventListener(键盘事件);
^
退出状态1
非静态成员函数的使用无效
------------main.ino--------------

#包括“lock.h”
门闩;
无效设置(){
门闩。开始(9600);
}
void循环(){
门闩;
}
-----------cpp.h文件------------

#包括“lock.h”
#包括“Arduino.h”
闩锁::闩锁():键盘(makeyMap(键)、行接点、列接点、行、列){
}
无效闩锁::开始(整数波特率){
串行开始(波特率);
Serial.println(“创建的闩锁库”);
键盘。addEventListener(键盘事件);
}
void闩锁::main(){
keypad.getKey();
}
无效闩锁::keypadEvent(keypadEvent输入){
开关(keypad.getState()){
案件已审结:
Serial.print(“输入:”);
Serial.println(输入);
延迟(10);
}
}
------------h文件-------------

#包括
#ifndef\U闩锁_
#定义锁存器_
#如果ARDUINO>=100
#包括“Arduino.h”
#否则
#包括“WProgram.h”
#恩迪夫
类闩锁{
公众:
闩锁();
无效键盘事件(键盘事件输入);
无效开始(整数波特率);
void main();
键盘;
私人:
常量字节行=4;
常量字节Cols=4;
字符键[4][4]={
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*'、'0'、'#'、'D'}
};
字节行pins[4]={7,6,5,4};
字节colPins[4]={11,10,9,8};
};
#恩迪夫
该函数

类锁存器{
...
无效键盘事件(键盘事件输入);
...
};
实际上是一个成员函数,这意味着它被隐式指定为
闩锁*此
作为附加参数

要解决此问题,请将函数设置为静态:

类锁存器{
...
静态无效键盘事件(键盘事件输入);
...
};
或者将其声明为类的
闩锁
朋友

类锁存器{
...
朋友:
无效键盘事件(键盘事件输入);
};
无效键盘事件(键盘事件输入)
{
}
我邀请您查阅关于这两个特性的大量在线文档,以便了解哪种方法更适合您的用例

在任何一种情况下,如果
锁存
包含一些需要通过
keypadEvent()
更改的状态信息,则您可能需要使用该函数

类锁存器{
...
无效键盘事件(键盘事件输入);
...
};
实际上是一个成员函数,这意味着它被隐式指定为
闩锁*此
作为附加参数

要解决此问题,请将函数设置为静态:

类锁存器{
...
静态无效键盘事件(键盘事件输入);
...
};
或者将其声明为类的
闩锁
朋友

类锁存器{
...
朋友:
无效键盘事件(键盘事件输入);
};
无效键盘事件(键盘事件输入)
{
}
我邀请您查阅关于这两个特性的大量在线文档,以便了解哪种方法更适合您的用例


在任何一种情况下,如果
闩锁
包含一些需要通过
keypadEvent()
更改的状态信息,则您可能希望使用。

我尝试了两种方法,但出现了其他错误。而我正在努力去理解单身汉pattern@wan我亲自测试了这两种方法,我可以保证它们可以作为通用解决方案工作;但是,您的实现可能包含一些错误;如果您需要进一步的帮助,请使用新的源代码和错误消息打开一个新问题。当您说将函数更改为静态函数时,是否只在h文件“static void keypadEvent(keypadEvent input);”中更改它我尝试了你的两种方法,但出现了其他错误。而我正在努力去理解单身汉pattern@wan我亲自测试了这两种方法,我可以保证它们可以作为通用解决方案工作;但是,您的实现可能包含一些错误;如果您需要进一步的帮助,请使用新的源代码和错误消息打开一个新问题。当您说将函数更改为静态函数时,是否只在h文件“static void keypadEvent(keypadEvent input);”中更改它