Невозможно вызвать метод класса в методе сигнала C - PullRequest
1 голос
/ 13 февраля 2012

Я хочу использовать метод класса в методе сигнала

signal(SIGALRM, syncro);

syncro - это имя другого метода класса.

void states::syncro( int parameter )
{

}

Я пытаюсь использовать syncro, &syncro, states::syncro и &states::syncro, но все они выдают сообщения об ошибках при компиляции.

error: argument of type ‘void (states::)(int)’ does not match ‘void (*)(int)’

1 Ответ

3 голосов
/ 13 февраля 2012

В этом случае вы можете вызывать только свободную функцию или функцию статического класса.

signal Сигнатура

typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);

Это означает, что она принимает только указатель на свободную функциюили статическая функция.

Обратите внимание, что у вас всегда должен быть объект для вызова member функции, скажем, если у вас есть

struct S
{
    void method();
}
S obj;

вы можете звонить только obj.method(), но не S::method() или method(), а указатель на S::method имеет тип void (S::*)().

Но если ваш S::method() был объявлен статическим, вы можете вызвать его с помощьюS::method().

Вот почему указатели на свободные функции несовместимы с указателями на функции-члены.

...