簡體   English   中英

如何創建和指向函數的指針數組?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM