2012-05-25 4 views
-2

Я написал программу, которая ловит сигналы <ctrl> + <c>, а затем выводит список, но у меня есть одна ошибка времени компиляции, которую я не могу пропустить. Я постоянно получаю эту ошибку:Ошибка времени компиляции Struct

cannot convert `void()()' to `void (*)(int)' in assignment

Согласно компилятором ошибка происходит в этой строке кода:

handler.sa_handler = handle_SIGINT; 

Здесь окружающий код, а также:

cmdcounter = 1; 

/*set up the signal handler*/ 
struct sigaction handler; 
handler.sa_handler = handle_SIGINT; 
sigaction(SIGINT, &handler, NULL); 

strcpy(buffer, "Caught <ctrl><c>\n"); 

handle_SIGINT определяется ранее в программе:

void handle_SIGINT() 
{ 
    write(STDOUT_FILENO, buffer, strlen(buffer)); 

    // Print out last 10 commands that were used. 
    printf("Most recent commands entered:\n"); 
    if(cmdcounter <= 10) { 
     for (i=0; i < cmdcounter; i++) { 
      printf("%d. %s\n", i+1, cmd[i]); 
     } 
    } 
    else { 
     for (i = cmdcounter-10; i < cmdcounter; i++) { 
      printf("%d. %f\n", i, cmd[i]); 
     } 
    } 
} 

Все выглядит хорошо для меня, но что-то явно не так. Кто-нибудь знает, что вызывает эту ошибку?

+2

Где находится 'handle_SIGINT'? –

+0

handle_SIGINT определяется ранее в программе как собственная функция – Bigby

+1

Вы должны включить это в свой вопрос. –

ответ

4

Ваша функция handle_SIGINT неверна.

Покажите нам эту функцию, и мы сможем рассказать вам, как это неправильно.

handle_SIGINT является ПРЕДПОЛАГАЛОСЬ быть:

void handle_SIGINT(int){....} 

Вы ушли из int части в качестве параметра.

3

Ошибка говорит вам, что подписи не совпадают. handle_SIGINT должно быть:

void handle_SIGINT(int){ ... } 
Смежные вопросы