yau*_*ser 3 c++ inheritance constructor
我有以下g ++错误
Menu.hpp:66:41: error: no matching function for call to ‘Menu::Stack<Submenu*>::push(Submenu*)’
Menu.hpp:66:41: note: candidate is:
Menu.hpp:14:21: note: void Menu::Stack<T>::push(T&) [with T = Submenu*]
Menu.hpp:14:21: note: no known conversion for argument 1 from ‘Submenu*’ to ‘Submenu*&’
Run Code Online (Sandbox Code Playgroud)
怎么这样的转换是不可能的?编译器在什么场合发出这样的错误?
至于我在做什么:
Stack<Submenu*>,用于映射记住打开的子菜单现在是最有可能成为问题的部分,即Menu的构造函数:
Menu() { stack.push( (Submenu*)this ); }
Run Code Online (Sandbox Code Playgroud)
它这样做是因为当所有菜单都关闭时,相对于stack.top()的方法应该引用Menu本身,也是一种Submenu(因为它继承了它).
我已经创建了自己的类Stack而不是使用std :: stack(正如我最初建议的那样),正如答案中所指出的那样,它存在问题.请原谅我的不准确之处.
通常,您只能将左值转换为引用,而不是rvalues(强制转换为右值).您可以将rvalues转换为const引用,这可能是您真正想要的 - 如果您更改Stack::push为使用const T &参数而不是a T &,则错误将消失.