Hej!
Chciałem nauczyć się przekazywania wartości przez wskaźniki z funkcji. Napisałem więc strukture kalkulatora gdzie funkcje odpowiadające za obliczenia są składowymi prywatnymi które są wskazywane przez publiczny wskaźnik `POper`. Poniższa funkcja ma służyć do przypisania do wskaźnika odpowiedniaj funkcji i zwrócenia wartości do zmiennej typu float, `m_sum`:
void Calculate() {
switch (m_s) {
default:
printf("Error, wrong operation sign\n");
break;
case '+':
POper = &Calculator::Add;
break;
case '-':
POper = &Calculator::Sub;
break;
case '*':
POper = &Calculator::Multi;
break;
case '/':
POper = &Calculator::Divide;
break;
}
m_sum = (*POper)();
}
float (Calculator::*POper)(); // Pointer to operation
Jednak dostaję błąd o niewłaściwym użyciu `*`:
../src/main.cpp:28:15: error: invalid use of unary ‘*’ on pointer to member
m_sum = (*POper)();
Edit: Tutaj cała implementacja klasy i użycie w main:
#include <stdio.h>
class Calculator {
public:
Calculator() { printf("Error, wrong initialization of Calculator object/n"); }
Calculator(float x, float y, char s): m_x(x), m_y(y),
m_s(s) { GetResult(); } /* Triple value initialization */
~Calculator() {} /* Delete POper */
void Calculate() {
switch (m_s) {
default:
printf("Error, wrong operation sign\n");
break;
case '+':
POper = &Calculator::Add;
break;
case '-':
POper = &Calculator::Sub;
break;
case '*':
POper = &Calculator::Multi;
break;
case '/':
POper = &Calculator::Divide;
break;
}
m_sum = (*POper)();
}
void GetResult() { Calculate(); printf("%f %d %f = %f\n", m_x, m_s, m_y, m_sum); }
float (Calculator::*POper)(); // Pointer to operation
private:
float m_x, m_y;
char m_s;
float m_sum;
/* Calculator operations */
float Add() { return m_x + m_y; }
float Sub() { return m_x - m_y; }
float Multi() { return m_x * m_y; }
float Divide() {
if ( m_x == 0 || m_y == 0 ) printf("Error, can't divivde by null!\n");
else return m_x / m_y;
}
};
int main() {
Calculator *cal;
cal = new Calculator(5, 5, '+');
return 0;
}