Есть несколько проблем с вашим кодом.
Во-первых, int (*opPtr)() = NULL;
не указатель на функцию-член, это указатель на свободную функцию.Объявите указатель на функцию-член следующим образом:
int (test::*opPtr)() = NULL;
Во-вторых, вам нужно указать область действия класса, когда принимает адрес функции-члена, например:
if (operatr == '+') opPtr = &test::add;
if (operatr == '*') opPtr = &test::multiply;
Наконец, для вызова через указатель на функцию-член существует специальный синтаксис:
return (this->*opPtr)();
Вот полный рабочий пример:
#include <iostream>
class test {
int a;
int b;
int add (){
return a + b;
}
int multiply (){
return a*b;
}
public:
int calculate (char operatr, int operand1, int operand2){
int (test::*opPtr)() = NULL;
a = operand1;
b = operand2;
if (operatr == '+') opPtr = &test::add;
if (operatr == '*') opPtr = &test::multiply;
return (this->*opPtr)();
}
};
int main(){
test t;
std::cout << t.calculate ('+', 2, 3);
}