我在Linux上使用gtkmm库为我的GUI绘制简单的菜单。
在下面的代码中,编译器报错无法解析地址。
sigc::mem_fun(*this, AppWindow::hide)));
^
appwindow.cpp:15:41: note: could not resolve address from overloaded function
但是当我插入 &
时,它就能够顺利编译通过
m_menu_app.items().push_back(MenuElem("Quit",
sigc::mem_fun(*this, &AppWindow::hide)));
这里有什么区别吗?毕竟 hide
函数本来就是一个地址,不是吗?
&
运算符返回 something 的地址。在这种情况下,它返回函数的地址,以便可以在运行时调用它。 - Giovanni Bottax
和&x
的值必须相同。也许编译器在处理函数时不喜欢没有&
的语法(尽管根据编译错误,这似乎与函数重载有关)。无论如何,在我看来,这是一个非常好的问题。 - barak manos