[英]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.