У меня есть проблема, я не знаю, как ее обойти.
Я использую библиотеку, экземпляры класса которой создаются путем передачи ссылок на несколько функций.
void func_on_enter() {...}
void func() {...}
void func_on_exit(){...}
State state_a(&func_on_enter, &func, &func_on_exit);
Я пишу класс, который содержит экземпляр этого класса, и поэтому попытался сделать что-то вроде этого:
class MyClass{
private:
void func_on_enter() {...}
void func() {...}
void func_on_exit(){...}
State _state_a;
public:
MyClass() : _state_a(&func_on_enter, &func, &func_on_exit) {}
};
Я получаю ошибку "ISO C ++ запрещает принимать адрес неквалифицированного илиНестатическая функция-член в скобках, чтобы сформировать указатель на функцию-член. Скажите '& MyClass :: _ func_on_enter' "(и то же самое для двух других методов, очевидно).Компилятор услужливо предоставляет решение, которое я попробовал.
Однако затем компилятор напоминает мне, что не существует соответствующей функции для вызова 'State::State(void (MyClass::*)(), void (MyClass::*)(), (MyClass::*)())'
и что он не имеет известного преобразования из 'void (MyClass::*)()'
в * 1013.*.
Я пытался прочитать похожие вопросы об этой ошибке, но, похоже, не могу найти решение, которое я и понимаю, и могу помочь в этой ситуации.
Я подумывал попытаться добавитьперегрузить конструктор в State, но это кажется абсурдным для класса в каждом конкретном случае, учитывая, что я мог бы вызывать его из любого другого класса.
Некоторое время я даже думал, что могу просто сделать функции статичными.(поскольку они одинаковы для всех экземпляров MyClass), но я быстро вспомнил, что тогда они не смогут использовать нестатические переменные-члены MyClass.
Возможно, есть способ, которым я могу предоставитьпреобразование или предоставить указатели для конструктора State по-другому?
Я мог бы действительно помочь с этим, так как яЗастрял в идеях о том, как двигаться вперед.Любая помощь или советы будут с благодарностью!