2012-09-19 91 views
0

我在嘗試調用函數時遇到下面的C2064錯誤。我究竟做錯了什麼?如何調用此函數指針

//error C2064: term does not evaluate to a function taking 1 arguments 
#include <iostream> 
#include <string> 

using namespace std; 

class DXStartupEncoder { 
public: 
    void EncodeA(string& message) const { message = "A"; } 
    void EncodeB(string& message) const { message = "B"; } 
    void EncodeC(string& message) const { message = "C"; } 
    void EncodeD(string& message) const { message = "D"; } 
    void EncodeE(string& message) const { message = "E"; } 
    void EncodeF(string& message) const { message = "F"; } 
}; 

typedef void (DXStartupEncoder::*Encoder)(string&) const; 
Encoder dn_sequence[] = {&DXStartupEncoder::EncodeA, &DXStartupEncoder::EncodeB, &DXStartupEncoder::EncodeC, &DXStartupEncoder::EncodeD }; 
Encoder queue_sequence[] = { &DXStartupEncoder::EncodeE, &DXStartupEncoder::EncodeF }; 


int main(int argc, char* argv[]) 
{ 
    for(int i = 0; i < sizeof(queue_sequence)/sizeof(queue_sequence[0]); ++i) { 
     string param; 
     queue_sequence[i](param); //How to call function here??? 
     cout << param << endl; 
    } 

    return 0; 
} 
+0

您有成員函數指針,所以您需要一個DXStartupEncoder實例來調用函數。 – juanchopanza

回答

4

你沒有函數指針,你有指針到成員函數數組。在取消引用成員指針時,您必須提供對象this對象。

(obj.*queue_sequence[i])(param); //obj must have type DXStartupEncoder 

或者,因爲你的職責是無狀態的,你可以讓他們static,然後用普通的函數指針。

typedef void (*Encoder)(string&) const; 
+0

啊我明白了。謝謝。 –