首页 > 解决方案 > C++没有构造函数实例匹配参数列表e0289

问题描述

所以代码应该可以工作,但事实并非如此。我该如何解决? 在此处输入图像描述

    #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;

}

标签: c++classconstructordeclarationstring-literals

解决方案


至少声明数据title成员

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 相对)具有常量字符数组的类型。

尽管使用类型而不是const char *数据成员的类型title会更好std::string

std::string title.

推荐阅读