簡體   English   中英

如何調用此函數指針

[英]How to call this function pointer

在嘗試調用函數時,下面出現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;
}

您沒有函數指針,而是有一個指向member-function指針數組。 取消引用成員指針時,必須提供this對象。

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

另外,由於您的函數是無狀態的,因此可以將其設置為static ,然后使用普通的函數指針。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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