Cảnh báo incompatible pointer type [-Wincompatible-pointer-types]
Mình đang tạo 1 chương trình để nhập dữ liệu đầu sách sử dụng typedef struct và hàm.
Đây là phần khai báo của mình sử dụng typedef struct:
typedef struct {
char name[1000], author[1000], publisher[1000], description[1000], ISBN[15];
} book;
Đây là phần hàm dùng để thêm thông tin đầu sách:
void addBook(int* n, book list[1000]) {
printf("Enter number of book you want to add: ");
fpurge(stdin);
scanf("%d", n);
int i;
for (i = 0; i < *n; i++) {
printf("Book title: ");
fpurge(stdin);
gets(list[i].name);
printf("Book author: ");
fpurge(stdin);
gets(list[i].author);
printf("Publisher: ");
fpurge(stdin);
gets(list[i].publisher);
printf("Description: ");
fpurge(stdin);
gets(list[i].description);
printf("ISBN: ");
fpurge(stdin);
gets(list[i].ISBN);
}
}
Và cuối cùng là phần main:
int main(int argc, char** argv) {
int n, list[1000];
addBook(&n, list);
return (EXIT_SUCCESS);
}
Khi chạy, chương trình vẫn hoạt động bình thường cho phép mình nhập sách vào tuy nhiên, trình biên dịch lại có 2 cảnh báo:
-
main.c:85:29: warning: passing argument 2 of ‘addBook’ from incompatible pointer type [-Wincompatible-pointer-types]
addBook(&n, list); -
main.c:33:6: note: expected ‘book * {aka struct *}’ but argument is of type 'int ’
void addBook(int n, book list[1000]) {
Mình thắc mắc tại sao trình biên dịch báo lại như trên nhưng chương trình vẫn hoạt động bình thường và cách khắc phục nào cho 2 cảnh báo trên.
Mình dùng Netbean IDE 8.2
1/ Dịch 2 lỗi đó ra, mọi thông tin bạn cần đều ghi rất rõ rồi. Dịch ra xong là sẽ biết sữa nhé
2/ Vẫn cho qua vì một số C compiler nới lỏng cái này. Bạn có thể chuyển qua C++ thì báo lỗi ngay và ko thể build chương trình.