C++ &引用;“调用”没有匹配的函数;在构造函数中

C++ &引用;“调用”没有匹配的函数;在构造函数中,c++,class,arduino,C++,Class,Arduino,我有一个MenuItem类声明如下 typedef字节(menuFn)(无效)//做事情 typedef字符串(updateFn)(无效)//更新显示字符串 类菜单项{ 公众: 菜单项(字符串数据字符串,菜单项*onCkFn,更新项*onUpdFn,布尔可点击); 字节点击(作废); 作废更新(作废); 字符串getDisplayString(void); void setDisplayString(字符串); 私人: 字符串\u显示字符串; 布尔不可舔; menuFn*_onClickFn;

我有一个
MenuItem
类声明如下

typedef字节(menuFn)(无效)//做事情
typedef字符串(updateFn)(无效)//更新显示字符串
类菜单项{
公众:
菜单项(字符串数据字符串,菜单项*onCkFn,更新项*onUpdFn,布尔可点击);
字节点击(作废);
作废更新(作废);
字符串getDisplayString(void);
void setDisplayString(字符串);
私人:
字符串\u显示字符串;
布尔不可舔;
menuFn*_onClickFn;
更新fn*_onUpdateFn;
};
MenuItem
构造函数:

MenuItem::MenuItem(String dString, menuFn *onCkFn, updateFn *onUpdFn, bool clickable)
{
    _displayString = dString;
    _isClickable   = clickable;
    _onClickFn    = onCkFn;
    _onUpdateFn    = onUpdFn;
}
然后在另一个类
菜单中使用,如下所示:

类菜单{
公众:
菜单(菜单项菜单项[4],菜单项静态项[2]);
void setItem(String itemText,byte num,menuFn itemClickFn,updateFn itemcupdatefn,bool itemClickable);
作废显示(作废);
字节doItem(按下字节按钮);
私人:
menuItems _menuItems[4];
MenuItem_静态项目[2];
};
这是
菜单
构造函数:

MenuItem::MenuItem(String dString, menuFn *onCkFn, updateFn *onUpdFn, bool clickable)
{
    _displayString = dString;
    _isClickable   = clickable;
    _onClickFn    = onCkFn;
    _onUpdateFn    = onUpdFn;
}
Menu::Menu(MenuItem theMenuItems[4],MenuItem theStaticItems[2])
{
用于(字节i=0;i<4;i++)
{
_menuItems[i]=菜单项[i];
}
用于(字节i=0;i<2;i++)
{
_静态项[i]=静态项[i];
}
}
当我去编译时,我得到以下错误:

[..]\Menu.cpp: In constructor 'Menu::Menu(MenuItem)':    
Menu.cpp:7: error: no matching function for call to 'MenuItem::MenuItem()'
Menu::Menu(MenuItem theMenuItems[4], MenuItem theStaticItems[2])
                                 ^
[..]\Menu.cpp:7:33: note: candidates are:
In file included from [..]\Menu.h:5:0,
                 from [..]\Menu.cpp:3:
[..]\MenuItem.h:11:3: note: MenuItem::MenuItem(String, byte (*)(), String (*)(), bool)
   MenuItem(String dString, menuFn *onCkFn, updateFn *onUpdFn, bool clickable);
   ^
[..]\MenuItem.h:11:3: note:   candidate expects 4 arguments, 0 provided
当我声明
菜单
时,错误似乎指向我需要为
菜单项
提供参数。我不明白这是怎么回事,因为直到我创建了一些
menuItem
实例,然后创建了一个
菜单
实例来包含它们,才知道它们


这是使用ARDUINO IDE BTW,所以它是C++(ISH)。

错误发生在<代码>菜单。CPP < /代码>中,您也应该公开这部分代码。错误可能是在实例化(使用)类菜单时发生的,而不是它的声明/定义。由于您没有在初始值设定项列表中初始化
MenuItem
,编译器必须在覆盖构造函数体中的
MenuItem::MenuItem()
)之前默认构造它们(
MenuItem::MenuItem())(使用赋值运算符)谢谢,我包含了构造函数。我没有实际使用
main()
(或Arduino等效项)中的菜单类,不管怎样都会引发此错误。不,您已使用4个参数
MenuItem(String,…bool)定义了构造函数
所以默认构造函数被删除,但是在执行
菜单的主体之前,所有的mamber->
MenuItem\u menuItems[4];
必须由
MenuItem
的默认构造函数构造,所以我再次说添加
MenuItem(){}
到您的文件。您在Botje的第二条评论中得到了问题的答案。
MenuItem()
缺失。如果您在MenuItem.h中为
MenuItem
构造函数
MenuItem的所有参数设置默认值(String dString=String(),menuFn*onCkFn=0,updateFn*onUpdFn=0,bool clickable=false);
也应该有效。