初C++,构造函数"no matching function call to"

Beginner C++, "no matching function call to" in constructor

本文关键字:function call to matching no 构造函数 C++      更新时间:2023-10-16

我正在尝试启动我的第一个Arduino项目,一个小型的8位手持游戏机。

所以,我正在努力完成我的第一堂课。我是CPP的新手,我过去做过大量的C#和java。

这是我的代码:

#include <SPI.h>
#include <TFT.h>
class Menu {
  String menuTitle = "Menu";
  TFT TFTscreen;
  public:
    Menu(String title, TFT screen)
    {
      menuTitle = title;
      TFTscreen = screen;
    }
    void Update() {
      TFTscreen.setTextSize(2);
      TFTscreen.text(menuTitle, 0, 0);
    }
};

我在Menu构造函数上得到一个错误,它说"调用‘TFT::TFT()’没有匹配的函数"。为什么会发生这种情况?为什么我不能像一样运行构造函数

Menu menu = new Menu("Test Menu", scrn);

我缺少什么和/或我必须做什么?

还有几个问题:哪里是进入CPP的好地方?这与C#有点"不同"。我不理解"指针"和其他一些东西的全部意义。

还有一个:如果你碰巧了解Arduino,有没有办法让我自己在Arduino上运行C#代码?不需要插入电脑?

谢谢你们!

从错误消息中可以看出,类TFT没有默认构造函数(可以在没有参数的情况下调用的构造函数)。

检查类定义。

出现错误是因为调用了类TFT 的默认构造函数

class Menu {
  String menuTitle = "Menu";
  TFT TFTscreen;
  ^^^^^^^^^^^^^^
  public:
    Menu(String title, TFT screen)
    {
      menuTitle = title;
      TFTscreen = screen;
    }
    //...

您可以用以下方式编写Menu构造函数

Menu( const String &title, const TFT &screen ) : menuTitle( title ), TFTscreen( screen )
{
}

(我不确定String是否是有效的类名)

因为C++不是C#,所以你可能不会写

Menu menu = new Menu("Test Menu", scrn);

你必须写

Menu *menu = new Menu("Test Menu", scrn);

或者你可以简单地写

Menu menu("Test Menu", scrn);
相关文章: