0
出於某種原因,我是無法理解這不起作用:爲什麼我不能在Gtk :: EventBox上調用remove()?
Gtk::EventBox *eb;
// ...
eb->foreach([eb](Gtk::Widget& w){ eb->remove(w); });
的錯誤我得到的是:
ImageClick.cpp: In lambda function:
ImageClick.cpp:20:50: error: no matching function for call to ‘Gtk::EventBox::remove(Gtk::Widget&)’
eb->foreach([eb](Gtk::Widget& w){ eb->remove(w); });
^
ImageClick.cpp:20:50: note: candidate is:
In file included from /usr/include/gtkmm-3.0/gtkmm/window.h:31:0,
from /usr/include/gtkmm-3.0/gtkmm/dialog.h:30,
from /usr/include/gtkmm-3.0/gtkmm/aboutdialog.h:33,
from /usr/include/gtkmm-3.0/gtkmm.h:99,
from ImageClick.cpp:1:
/usr/include/gtkmm-3.0/gtkmm/bin.h:141:8: note: void Gtk::Bin::remove()
void remove();
^
/usr/include/gtkmm-3.0/gtkmm/bin.h:141:8: note: candidate expects 0 arguments, 1 provided
但是,如果我將其更改爲eb->Gtk::Container::remove(w);
它按預期工作。文檔顯示Gtk :: EventBox是Gtk :: Container的子類,它不是一個虛函數,也不會覆蓋任何地方。那麼這種行爲的原因是什麼?
你是什麼意思「這不行」? – LogicStuff
@LogicStuff正確,我應該更清楚。編輯該問題並添加錯誤消息。 – v010dya
我不是GTK的人,但'Gtk :: EventBox'可能聲明'remove',但不提供一個需要'Gtk :: Widget'的重載。如果是這樣,它不會在名稱解析(Google成員隱藏)期間提取基類中的聲明,您必須提供一個完全限定的名稱,例如您找到的解決方案或更改您的lambda以採用'Gtk :: Container作爲它的論據。 –