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.
所以代码应该可以工作,但事实并非如此。我该如何解决? 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.