次の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*>
メニューには、開いているサブメニューを記憶してマップするタイプの追加フィールドがあります- 「メニューを開く」、「メニュー項目をクリックする」などのメニューのすべてのメソッドは、現在スタックのtop()にあるサブメニューを参照します。クラスサブメニュー内では、オブジェクト自体を操作します。
- Menuには、現在のサブメニューを閉じて上に移動するパブリックメソッドがあります。つまり、スタックからサブメニューをポップします。
- メニューはそれ自体に到達するまでポップする可能性があります。以下の意味を参照してください。
これがおそらく問題となる部分、つまりMenuのコンストラクターです。
Menu() { stack.push( (Submenu*)this ); }
これは、すべてのメニューが閉じられると、stack.top()に関連するメソッドがメニュー自体を参照する必要があるためです。これも一種のサブメニューです(メニューから継承するため)。
編集:
std :: stackを使用する代わりに(最初に提案したように)独自のクラスStackを作成しましたが、回答で指摘されているように、問題がありました。その不正確さについてすみません。