[英]How do I create and array of pointers to functions?
gcc 6.4.0赢得7 Netbeans 8.2
我不知道我在做什么错。
#ifndef TYPEDEF_H
#define TYPEDEF_H
class Typedef {
class Alphabet { };
class Tuple { };
class Operations { };
public:
void test();
private:
Tuple constant(long one, long two, Alphabet& bet, Operations& op) { return Tuple(); } ;
Tuple expression(long one, long two, Alphabet& bet, Operations& op) {return Tuple(); } ;
};
#endif /* TYPEDEF_H */
===================== .cpp file ========================
#include "Typedef.h"
void Typedef::test() {
typedef Tuple (*fn)(long, long, Alphabet&, Operations&);
fn func[] = { constant, expression };
Tuple (*fnc[2])= { constant, expression };
}
Typedef.cpp:在成员函数'void Typedef :: test()'中:
Typedef.cpp:6:44:错误:无法将类型'Typedef :: Tuple(Typedef ::)(long int,long int,Typedef :: Alphabet&,Typedef :: Operations&)的'Typedef :: constant'转换为类型'fn {aka Typedef :: Tuple(*)(long int,long int,Typedef :: Alphabet&,Typedef :: Operations&)}'fn func [] = {常量,表达式};
对于所有四个实例重复此错误消息。 我已经尝试过&constant了,并且按预期的那样是行不通的。
类成员函数的特殊之处在于它接受附加的不可见参数this*
指针。 同样,成员函数和自由函数是完全不同的类型,即使后者具有与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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.