C++ 没有构造函数的实例匹配参数列表 e0289

C++ no instance of constructor matches the argument list e0289

所以代码应该可以工作,但事实并非如此。我该如何解决? enter image description here

    #include <iostream>

class Button{
private:
    unsigned width; 
    unsigned height;

public:

    Button(): width(0), height(0){};

    Button(unsigned _width, unsigned _height): 
        width(_width), height(_height){};

    unsigned getWidth(){ return width; };

    unsigned getHeight(){ return height; };

    void setWidth(unsigned _width){ width = _width; };

    void setHeight(unsigned _height){ height = _height; }; 

};

class Window{
protected:
    Button button;

    int x;
    int y;

public:

    Window(){
        x = y = 0;
    }

    Window(int _x, int _y, Button _button):
        x(_x), y(_y), button(_button){};
    
    ~Window(){
        x = 0;
        y = 0;
    }

};

class Menu: public Window{
private:
    char *title;

public:
    Menu() = default;

    Menu(char* _title, int _x, int _y, Button _button):
        title(_title), Window(_x, _y, _button){
            std::cout << "Menu has been created." << std::endl;
        };
    
    ~Menu(){
        title = NULL;
        std::cout << "Menu has been deleted." << std::endl;
    }

    friend std::ostream& operator<<(std::ostream& os, Menu& menu){
        os << "Button \"" << menu.title << "\" on (" << menu.x << "," << menu.y << ") with size " << menu.button.getWidth() << "x" << menu.button.getHeight() << ".";
        return os;  
    } 
    
};


int main(){

    Button button(10, 10);

    Menu menu("A main menu", 5, 5, button);

    std::cout << menu << std::endl;

    return 0;

}

至少声明数据成员title like

const char *title;

这样的构造函数
Menu( const char* _title, int _x, int _y, Button _button):
    Window(_x, _y, _button), title(_title) {
        std::cout << "Menu has been created." << std::endl;
    };

因为 C++ 中的字符串文字(与 C 语言相反)具有常量字符数组类型。

尽管不使用数据成员 title 的类型 const char *,但使用类型 std::string

会好得多
std::string title.