为什么这段代码会导致编译错误?
#include <iostream>
#include <algorithm>
using namespace std;
class X
{
public:
void Print(int x)
{
cout << x << endl;
}
};
int main()
{
X x;
mem_fun_ref<void, X, int>(&X::Print) p;
};
错误
main.cpp:18: error: expected ; before p
答案 0 :(得分:2)
mem_fun_ref
是一个函数模板,因此它没有命名类型。
mem_fun_ref<void, X, int>(&X::Print)
是一个返回值的函数调用,因此跟随它有p
毫无意义。
该函数调用的返回值为mem_fun1_ref_t<void, X, int>
,以防您查找。
答案 1 :(得分:2)
你打算写吗
mem_fun1_ref_t<void, X, int> p(&X::Print);
^^^^ ^^^
代替? mem_fun_ref
不是类模板,而是函数模板。