通过Arduino项目中的指针从指定的类调用非静态方法

问题描述

我正在开发一个Arduino项目,该项目需要使用LCD屏幕和数量动态变化的菜单。在带有Arduino扩展的VS2019中工作,我创建了一个菜单类,该菜单类包含一个具有两个变量的struct(MenuItem)列表:菜单名称(menuFunctionName)和一个指向函数调用的指针(UI :: * menuFunctionCall)( int x)在选择该菜单项时采用一个int作为参数。我需要在名为UI的类中创建方法,然后将其附加到此列表中,从而形成菜单

菜单类的一部分:

<D extends C> execute(Command,D)

在UI类中,我有一个派生自Menu(m_mainMenu)的成员,该成员通过addMenuItem添加项目。到目前为止,我可以成功地将项目添加到由UI内部方法调用和某些名称组成的列表中。

class UI; 

class Menu
{
public:
    struct MenuItem
    {
        void (UI::*menuFunctionCall)(int x);
        char menuFunctionName[30];
    };
    
    virtual void addMenuItem(void (UI::*menuFunction)(int x),const char* menuName);
    
protected:
    MenuItem* p_menuItems; //addMenuItem populates this 
    
};

我面临的问题是调用方法的存储指针之一。所以现在我在p_menuItems中有一个列表,我想从MainMenu调用它。所以menuFunctionCall是列表中位置[0]处存储的指针,而XXX是要传递给它的一些int值。

...//How MaineMenu gets made
class MainMenu final: public Menu
{};
...

//how UI gets made
#include "MainMenu.h"
class UI 
{
private:
     MainMenu m_mainMenu;
     void mainBtnPress(int x);
    
};
...//Inside it's constructor
UI::UI()
{
    m_mainMenu = MainMenu(p_joy,p_display);
    m_mainMenu.addMenuItem(&UI::mainBtnPress,"x"); //This works OK
}

我在编译时收到“'*'令牌之前的预期非限定ID”。由于这是一个Arduino项目,我必须使用的内存有限,因此std :: function或其他类似的库太大而无法使用。我很自信,这只是语法错误

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)