Непонятная ошибка компилятора.

Арсений_Хотабыч

✩✩✩✩✩✩✩
16 Май 2021
2
0
Форумчанам - привет! Возникла такая проблема: я написал библиотеку для кнопки и начал компилировать но вышла вот такая ошибка:

Compiling library "Button"
"C:\\Program Files\\arduino-1.8.13\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\\Program Files\\arduino-1.8.13\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Program Files\\arduino-1.8.13\\hardware\\arduino\\avr\\variants\\standard" "-IC:\\Users\\ars69\\Documents\\Документы\\Arduino\\libraries\\Button" "C:\\Users\\ars69\\Documents\\Документы\\Arduino\\libraries\\Button\\Button.cpp" -o "C:\\Users\\ars69\\AppData\\Local\\Temp\\arduino_build_393044\\libraries\\Button\\Button.cpp.o"
C:\Users\ars69\Documents\���������\Arduino\libraries\Button\Button.cpp: In function 'bool isHold()':
C:\Users\ars69\Documents\���������\Arduino\libraries\Button\Button.cpp:86:6: error: '_mode' was not declared in this scope
if (_mode) Button::tick();
^~~~~
C:\Users\ars69\Documents\���������\Arduino\libraries\Button\Button.cpp:86:6: note: suggested alternative: 'modf'
if (_mode) Button::tick();
^~~~~
modf
C:\Users\ars69\Documents\���������\Arduino\libraries\Button\Button.cpp:86:26: error: cannot call member function 'void Button::tick()' without object
if (_mode) Button::tick();
^
C:\Users\ars69\Documents\���������\Arduino\libraries\Button\Button.cpp:87:7: error: '_hold_flag' was not declared in this scope
if (_hold_flag) return true;
^~~~~~~~~~
C:\Users\ars69\Documents\���������\Arduino\libraries\Button\Button.cpp:88:6: error: '_butt_state' was not declared in this scope
if (_butt_state && _butt_flag && millis() - _tmr > _holdTime && !_hold_flag) {
^~~~~~~~~~~
C:\Users\ars69\Documents\���������\Arduino\libraries\Button\Button.cpp:88:21: error: '_butt_flag' was not declared in this scope
if (_butt_state && _butt_flag && millis() - _tmr > _holdTime && !_hold_flag) {
^~~~~~~~~~
C:\Users\ars69\Documents\���������\Arduino\libraries\Button\Button.cpp:88:46: error: '_tmr' was not declared in this scope
if (_butt_state && _butt_flag && millis() - _tmr > _holdTime && !_hold_flag) {
^~~~
C:\Users\ars69\Documents\���������\Arduino\libraries\Button\Button.cpp:88:53: error: '_holdTime' was not declared in this scope
if (_butt_state && _butt_flag && millis() - _tmr > _holdTime && !_hold_flag) {
^~~~~~~~~
C:\Users\ars69\Documents\���������\Arduino\libraries\Button\Button.cpp:88:67: error: '_hold_flag' was not declared in this scope
if (_butt_state && _butt_flag && millis() - _tmr > _holdTime && !_hold_flag) {
^~~~~~~~~~
Используем библиотеку Button в папке: C:\Users\ars69\Documents\Документы\Arduino\libraries\Button (legacy)
exit status 1

Ошибка компиляции для платы Arduino Uno

Написано: переменная не объявлена.
Хотя в файле библиотеки.h в классе в private есть объявление этих переменных.
Скетч:
C++:
#include <Button.h>
Button butt(2);
void setup(){
Serial.begin(115200);
}

void loop(){
  butt.tick();
  if(butt.hasClick()){
    Serial.println(butt.getClicks());
  }
}
Файлы библиотеки прикреплены. Пожалуйста, кто знает помогите.
 

Вложения

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
208
Функция isHold не является методом класса Button, соответственно у неё нет доступа к членам класса Button, поэтому компилятор не знает, про какие такие _mode, _hold_flag и т.д. идёт речь.
 

rGlory

★✩✩✩✩✩✩
11 Май 2021
200
20
Ошибки компиляции самой библиотеки Button, толи устаревшая библиотека, которая больше не компилируется, либо битые файлы. (либо она никогда не компилировалась). Что за библиотека и откуда вы ее взяли?

Посмотрел исходники. Все должно компилироваться. Похоже у вас стоит еще какая-то библиотека, в которой есть Button.h, и компилятор ее цепляет первой. Проверьте. В крайнем случае переименуйте Button.h (и поправьте исходник Button.cpp и ваш скетч)