我有一个这样声明的MenuItem
类
typedef byte (menuFn)(void); //does the things
typedef String (updateFn)(void); //updates the display string
class MenuItem {
public:
MenuItem(String dString, menuFn *onCkFn, updateFn *onUpdFn, bool clickable);
byte click(void);
void update(void);
String getDisplayString(void);
void setDisplayString(String);
private:
String _displayString;
bool _isClickable;
menuFn *_onClickFn;
updateFn *_onUpdateFn;
};
MenuItem
构造函数:
MenuItem::MenuItem(String dString, menuFn *onCkFn, updateFn *onUpdFn, bool clickable)
{
_displayString = dString;
_isClickable = clickable;
_onClickFn = onCkFn;
_onUpdateFn = onUpdFn;
}
然后在另一个类Menu
中使用,如下所示:
class Menu{
public:
Menu(MenuItem menuItems[4], MenuItem staticItems[2]);
void setItem(String itemText, byte num, menuFn itemClickFn, updateFn itemUpdateFn, bool itemClickable);
void display(void);
byte doItem(byte buttonPressed);
private:
MenuItem _menuItems[4];
MenuItem _staticItems[2];
};
这是Menu
构造函数:
Menu::Menu(MenuItem theMenuItems[4], MenuItem theStaticItems[2])
{
for (byte i = 0; i < 4; i++)
{
_menuItems[i] = theMenuItems[i];
}
for (byte i = 0; i < 2; i++)
{
_staticItems[i] = theStaticItems[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
时需要为Menu
提供参数。我不知道它是如何工作的,因为直到我创建一些menuItem
实例然后再创建一个Menu
实例来包含它们之前,它们是未知的。
这是使用Arduino IDE BTW,所以它是c ++(ish)。