Đối số loại void (*)(int)
không tương thích với tham số có kiểu __sighnd64_t
tín hiệu xử lý trong C++
Dưới đây là mã đơn giản của tôi:
#include <iostream>
#include <string>
#include <signal.h>
#include <ctype>
#include <stdlib.h>
#include <stdio.h>
typedef struct mystrcut
{
int a;
char *b;
} mystr;
void set_string (char **, const char *);
void my_handler(int s)
{
printf("Caught signal %d\n",s);
exit(1);
}
int main()
{
const std::string str1[] = {"hello1", "hello2"};
char str2[50];
size_t size1 = str1[1].size();
cout << size1;
memcpy (str2, str1[1].c_str(), size1);
cout << str2;
mystr *m = NULL;
m = new mystrcut;
m->a = 5;
set_string(&m->b, "hello");
cout << m->b;
delete []m->b;
// void (*prev_fn)(int);
signal (SIGINT,my_handler);
return 0;
}
void set_string (char **a, const char *b)
{
*a = new char [strlen(b)+1];
strcpy (*a, b);
}
tôi đang làm việc trên OpenVMS. Tôi có thể tránh được lỗi biên dịch của một số kiểu đúc không? Trình biên dịch của tôi mong đợi `__sighnd64_t __64_signal (int, __sighnd64_t);
Thêm xung quanh trình xử lý extern c đã hoạt động. Cảm ơn
Đó là lạ vì AFAIK '__sighnd64_t' được typedef'd cho 'void (*) (int)'. Nhưng có những vấn đề khác trong mã của bạn ... ví dụ 'cout' phải là số nhận dạng không khai báo vì bạn không sử dụng' std :: ' –
Bạn có thể phải tìm trong tệp cho trình biên dịch của bạn (cái nào?) , để xem chính xác những gì nó mong đợi cho các tham số 'signal()'. –
Xin lỗi vì câu hỏi có thể ngu ngốc, nhưng bạn có vấn đề biên dịch không? trên linux nó biên dịch và hoạt động, thêm đúng std :: khi cần thiết. – dave