如何创建函数指针和数组?

时间:2017-09-29 14:43:10

标签: c++ c++11

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};

对所有四个实例重复出现错误消息。我已经尝试过并保持不变,正如预期的那样,它没有工作。

1 个答案:

答案 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