Мною создан проект с++ с использованием класса. Но я не могу обратиться к функциям созданного объекта. Программа просто не видит эти функции. При этом проблем с созданием объекта не возникло.
Вряд-ли ошибка в кодеБез кода Вам будет сложно помочь.
GButton ok(); // создание объекта
ok.lol(); // попытка обратитьтся к функцие объекта, выдаёт ошибку
error: request for member 'tick' in 'butt1', which is of non-class type 'GButton()'
// так выглядит ошибка
/*
* GButton.h
*
* Created on: May 6, 2021
* Author: root-
*/
#ifndef BTNS_GBUTTON_HPP_
#define BTNS_GBUTTON_HPP_
#include "main.h"
#include <stddef.h>
typedef struct {
bool btn_deb :1;
bool hold_flag :1;
bool counter_flag :1;
bool isHolded_f :1;
bool isRelease_f :1;
bool isPress_f :1;
bool step_flag :1;
bool oneClick_f :1;
bool isOne_f :1;
bool inv_state :1;
bool mode :1;
} GyverButtonFlags;
#define NORM_OPEN 0
#define NORM_CLOSE 1
#define MANUAL 0
#define AUTO 1
class GButton {
public:
GButton(bool dir = NORM_OPEN);
virtual ~GButton();
void lol();
void setDebounce(uint16_t debounce); // установка времени антидребезга (по умолчанию 80 мс)
void setTimeout(uint16_t new_timeout); // установка таймаута удержания (по умолчанию 300 мс)
void setClickTimeout(uint16_t new_timeout); // установка таймаута между кликами (по умолчанию 500 мс)
void setStepTimeout(uint16_t step_timeout); // установка таймаута между инкрементами (по умолчанию 400 мс)
void setDirection(bool dir); // установка направления (разомкнута/замкнута по умолчанию - NORM_OPEN, NORM_CLOSE)
bool isPress(); // возвращает true при нажатии на кнопку. Сбрасывается после вызова
bool isRelease(); // возвращает true при отпускании кнопки. Сбрасывается после вызова
bool isClick(); // возвращает true при клике. Сбрасывается после вызова
bool isHolded(); // возвращает true при удержании дольше timeout. Сбрасывается после вызова
bool isHold(); // возвращает true при нажатой кнопке, не сбрасывается
bool state(); // возвращает состояние кнопки
void tick(bool state = 0);
private:
GyverButtonFlags flags;
uint8_t _PIN = 0;
uint16_t _debounce = 60;
uint16_t _timeout = 500;
uint16_t _click_timeout = 500;
uint16_t _step_timeout = 400;
uint8_t btn_counter = 0, last_counter = 0, last_hold_counter = 0;
uint32_t btn_timer = 0;
bool btn_state = false;
bool btn_flag = false;
}button;
GButton ok();
#endif /* BTNS_GBUTTON_HЗЗ_ */
GButton ok; // создание объекта
3-4
а где она еще может быть?Вряд-ли ошибка в коде
ну вот, а вы говорили...Ошибка заключалась в использование скобок после создания класса
в настройках среды можно решить 90% проблем связанных с с++а где она еще может быть?
самому-то не смешно?в настройках среды можно решить 90% проблем связанных с с++
Умилительная самоуверенность. Я аж подписался на автора.Вряд-ли ошибка в коде
Вы знаете только одну из проблем. Прежде чем мне удалось хотя-бы объявить класс, было множество проблем со средой.самому-то не смешно?
Большинство "проблем с С++" на форумах - это незакрытые скобки, неописанные переменные, непонимание работы операторов.
Нет, всего-лишь забыл, что если для объекта не задаются параметры, скобки не нужны.Или вот Вы - перепутали обьект с функцией.
каких, даже любопытно? Вам не приходит в голову, что в этом виновата не среда?Прежде чем мне удалось хотя-бы объявить класс, было множество проблем со средой.
А почему вы решили, что я использую Ардуино?У меня опыта мало, я ни разу не менял настройки Ардуино.
а есть принципиальная разница?А почему вы решили, что я использую Ардуино?
ну, здесь это ни на что не влияет, а вообще ВСЕГДА обьявлять деструктор - полезная привычка.Класс, от которого вы не собираетесь наследоваться и не собираетесь использовать полиморфно совершенно не обязательно должен иметь виртуальный деструктор.
Между всегда объявлять деструктор и всегда объявлять виртуальный деструктор есть большая разница, особенно для МК. Для ESP32 наверное сильно не скажется, но если так начать писать для какого нибудь ATtiny, то без флеша можно быстро остаться.ну, здесь это ни на что не влияет, а вообще ВСЕГДА обьявлять деструктор - полезная привычка.
Мало того, их там двое! (как в анекдоте про Илью Муромца )А вот то, что у него обьект кнопки обьявлен в заголовочном файле - это серьезный ляп, это я просмотрел.