【发布时间】:2015-03-08 07:42:46
【问题描述】:
我正在使用 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 函数一开始不就是一个地址吗?
【问题讨论】:
-
一个是C++,另一个不是。
-
有点不方便,但这只是必需的语法。
-
&运算符返回 something 的地址。在这种情况下,它返回函数的地址,以便可以在运行时调用。 -
OP 在(隐含提及的)事实中是正确的,即对于函数符号,与数组符号一样,
x和&x的值必须相同。当涉及到函数时,编译器可能不“喜欢”没有&的语法(尽管根据编译错误,它与函数重载的事实特别有关)。无论如何,我认为这是一个非常好的问题。
标签: c++ function-pointers