tab
- это метод Lekcja1
, который отличается от обычной функции, поскольку ему необходим доступ ко всем элементам данных Lekcja1
.
. Вы можете сделать Lekcja1::tab
статическим. c метод, который скрывает доступ к элементу данных и делает его нормальной функцией:
class Lekcja1 : public ZadanieW {
//...
public:
static void tab();
//...
};
Или, если вам нужен tab
для доступа к элементам данных Lekcja1
, тогда конструктор wyborZadania
должен возьмите указатель на член Lekcja1
и экземпляр Lekcja1
вместо указателя на функцию:
wyborZadania(int num,void (Lekcja1::*tab)(), Lekcja1& instance) {
// ...
(instance.*tab)();
// ...
}
Если вам нужно, чтобы это было более гибко или принимало разные типы классов, тогда wyborZadania
должен принимать std::function
, который является богатой оболочкой для функции, которая позволит вам связывать аргументы и данные.
wyborZadania(int num,std::function<void()> tab) {
// ...
tab();
// ...
}
А затем в LekcjaChose()
передать лямбду для вызова tab () :
wyborZadania* obj = new wyborZadania(numerZad,[this](){ tab(); };
демо: https://godbolt.org/z/XfwpSJ