функция-член в аргументе функции
Задача: сделать функцию член-класса, аргументами которой являются как переменные, так и другие функции-члены другого класса.
//hpp
class first {
public:
void function (int func(int, int), int, int, int);
void control (void);
};
//cpp
extern first First;
first First;
int f2(int z){
return z*z;
}
void first::function (int f(int, int), int a, int b, int z){
test_displ.sl_x1 = f(a, b); // вывод на дисплей значения функции
test_displ.sl_x2 = f2(z); // вывод на дисплей значения функции f2
}
int f1(int x, int y){
return x+y;
}
void first::control(void){ // 10Hz cycle
inter.function(f1, 1, 2, 3);
} // работающий код
В таком виде все работает, значения на экран выводятся. Мне же нужно, чтобы функция f1
оказалась функцией членом класса second
. При написании следующего кода появляется ошибка A pointer to a bound function may only be used to call the function
. Я как понял проблема в том, что функция f1 является не свободной, а функцией-членом. Вопрос, как ее переделать, чтобы ниже приведенный код работал?
//hpp
class first {
public:
void function (int func(int, int), int, int, int);
void control (void);
};
class second {
public:
void f1 (int, int);
}
//cpp
extern first First;
extern second Second;
first First;
second Second;
int f2(int z){
return z*z;
}
void first::function (int f(int, int), int a, int b, int z){
test_displ.sl_x1 = f(a, b); // вывод на дисплей значения функции
test_displ.sl_x2 = f2(z); // вывод на дисплей значения функции f2
}
int second::f1(int x, int y){
return x+y;
}
void first::control(void){ // 10Hz cycle
inter.function(Second.f1, 1, 2, 3);
} // не работающий код
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Все запутанно. У вас в объявлении одни типы функций, в реализации другие...
Возможно, вы хотите нечто в этом духе?
class second {
public:
int f1 (int, int);
};
class first {
public:
void function(second& s, int (second::*f)(int, int), int a, int b, int z);
void control (void);
};
first First;
second Second;
int f2(int z){
return z*z;
}
void first::function(second& s, int (second::*f)(int, int), int a, int b, int z){
(s.*f)(a, b);
f2(z);
}
int second::f1(int x, int y){
return x+y;
}
void first::control(void){ // 10Hz cycle
function(Second, &second::f1, 1, 2, 3);
}