Как вызвать указатель на эту функцию

Я получаю ошибку 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

Решение

У вас нет указателей на функции, у вас есть массив указатель на член-функции. Вы должны поставить this объект при разыменовании указателя на член.

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

Кроме того, так как ваши функции не сохраняют состояния, вы можете сделать их static а затем использовать обычные указатели функций.

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]