2012-09-19 3 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

아하이 봐요. 감사. –

관련 문제