构造函数中的“没有匹配的调用函数”

时间:2018-08-02 08:17:58

标签: c++ class arduino

我有一个这样声明的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)。

0 个答案:

没有答案