error: invalid use of non-static member function

Тема в разделе "Arduino & Shields", создана пользователем Vovka, 20 янв 2019.

  1. Vovka

    Vovka Гик

    Сам код:
    Код (C++):

    typedef void (*FuncPtr)(void);

    #include <LiquidCrystal.h>
    static LiquidCrystal disp(5, 6, 10, 11, A3, A2);

    void init( FuncPtr f1_ )
    {
      f1_();
    }

    void setup() {
      init( disp.clear ); // ошибка!
    }

    void loop() {
    }
     
    Как бороться с этой ошибкой? Такой вариант работает, но не устраивает:
    Код (C++):
    void disp_clear()
    {
    disp.clear();
    }
    ...
    init( disp_clear );
     
     
  2. Asper Daffy

    Asper Daffy Иксперд

    В Вашем случае - никак. Измените программу так, чтобы что это не было нужно.

    Вы описали указатель на функцию, а передавать пытаетесь нестатический метод класса. Но ведь метод класса - он не просто функция, он привязан к экземпляру, а как он у Вас привяжется?

    Теоретически, можно конечно и передать и привязать (не просто, но можно), но судя по Вашему вопросу - это далеко выходит за уровень Вашего понимания механизмов организации классов, потому просто постарайтесь избежать самой необходимости это делать. Даже если дать Вам шаблон как это сделать, без понимания Вы будете там постоянно по граблям топтаться.

    Если Вам не нравится второй вариант, передавайте сам экземпляр (вернее. ссылку на него):

    Код (C++):
    void clear(LiquidCrystal & d)  {
        d.clear();
    }
    ...
    clear( disp );
    Если и это не нравится, ну, ... я не знаю какова Ваша задача.
     
    Daniil и DetSimen нравится это.