为什么我不能在 Gtk::EventBox 上调用 remove()?
Why can't i call remove() on Gtk::EventBox?
出于某种我无法理解的原因,这不起作用:
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 的子类,它不是虚函数,也没有在任何地方被覆盖。那么这种行为的原因是什么?
看来是C++的正常运行
container.h
virtual void on_remove(Widget* widget);
bin.h
void remove();
和eventbox.h没有定义这个函数。
正在尝试重新创建此场景:
#include <iostream>
class A
{
public:
void foo(int) { std::cout << 'A' << std::endl; }
};
class B : public A
{
public:
void foo() { std::cout << 'B' << std::endl; }
};
class C : public B
{
};
int main()
{
C c;
c.foo(5);
}
上面的代码产生了完全相同的错误。似乎该名称停止了任何进一步的查找。我知道阴影,但是当阴影功能实际上不适合世界上所有的 thunk 时,我不知道会发生这种情况。
出于某种我无法理解的原因,这不起作用:
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 的子类,它不是虚函数,也没有在任何地方被覆盖。那么这种行为的原因是什么?
看来是C++的正常运行
container.h
virtual void on_remove(Widget* widget);
bin.h
void remove();
和eventbox.h没有定义这个函数。
正在尝试重新创建此场景:
#include <iostream>
class A
{
public:
void foo(int) { std::cout << 'A' << std::endl; }
};
class B : public A
{
public:
void foo() { std::cout << 'B' << std::endl; }
};
class C : public B
{
};
int main()
{
C c;
c.foo(5);
}
上面的代码产生了完全相同的错误。似乎该名称停止了任何进一步的查找。我知道阴影,但是当阴影功能实际上不适合世界上所有的 thunk 时,我不知道会发生这种情况。