为什么我不能在 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);
}
上面的代码会产生完全相同的错误。似乎该名称停止了任何进一步的查找。我知道阴影,但不知道当阴影功能实际上甚至不适合世界上所有的坦克时,这已经发生了。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- 变量没有改变?通过向量的函数调用
- 使用函数"remove"删除重复元素
- 在不存在的记录上调用 remove 会使程序崩溃
- QDir::remove() 在特定插槽中调用时总是导致崩溃
- 调用remove()删除析构函数中的文件是否安全
- std::list.remove 正在调用析构函数,但不删除它
- 为什么我不能在 Gtk::EventBox 上调用 remove()?