我有以下的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*&’
這種轉換如何幾乎是不可能的?編譯器在什麼情況下發布這樣的錯誤?
至於什麼我實際上做:
- 我有一個類子菜單
- 我有一個類的菜單,從子菜單繼承
- 菜單有
Stack<Submenu*>
類型的附加字段將映射記住打開子菜單 - 菜單的所有方法(如「打開菜單」,「點擊菜單項」等)都是指當前位於堆棧頂部()的子菜單。在子類Submenu中,它們在對象本身上進行操作。
- 菜單有一個公開的方法來關閉當前的子菜單並向上 - 即彈出堆棧中的子菜單。
- 菜單可以彈出,直到它到達本身,請參閱下面的含義。
現在是最有可能的問題,即,菜單的構造函數的一部分:
Menu() { stack.push((Submenu*)this); }
它這樣做,因爲當所有的菜單得到封閉,相對的方法來stack.top()應請參考菜單本身,也是一種子菜單(因爲它繼承了它)。
編輯:
我做的,而不是使用的std ::堆棧(如我最初建議),並在答案中指出我自己的類堆棧,有說謊的問題。請原諒我的不準確。