gcc 6.4.0 赢7 Netbeans 8.2
我无法弄清楚我做错了什么。
readChar()
Typedef.cpp:在成员函数' void Typedef :: test()':
Typedef.cpp:6:44:错误:无法转换' Typedef :: constant'从类型 ' Typedef :: Tuple(Typedef ::)(long int,long int,Typedef :: Alphabet&, 的typedef ::营运及放大器;)'输入' fn {aka Typedef :: Tuple(*)(long int, long int,Typedef :: Alphabet&,Typedef :: Operations&)}' fn func [] = {constant,expression};
对所有四个实例重复出现错误消息。我已经尝试过并保持不变,正如预期的那样,它没有工作。
答案 0 :(得分:2)
类成员函数的特殊之处在于它接受一个额外的不可见参数this*
指针。此外,成员函数和自由函数是完全不同的类型,即使后者具有与this*
类型兼容的额外参数。
要捕获指向成员函数的指针,请使用成员指针语法(Typedef::*
),如下所示:
void Typedef::test() {
typedef Tuple (Typedef::*fn)(long, long, Alphabet&, Operations&);
fn func[] = { &Typedef::constant, &Typedef::expression };
}
此外,成员函数的地址只能在完全限定名称上使用(参考:[expr.unary.op]/4),因此您必须使用&Typedef::constant, &Typedef::expression
。