我有一個/兩個我的方法時,我在main()
調用它的問題,我不確定爲什麼。不兼容類型的參數和未初始化在此函數
int main()
{
struct list * list;
list_init(list);
while(TRUE)
{
struct book book1;
printf("Enter title of book: ");
if(!getInput(book1.title, sizeof(book1.title)))
{
break;
}
printf("Enter author of book: ");
if(!getInput(book1.author, sizeof(book1.author)))
{
break;
}
printf("Enter dewey code of book: ");
if(!getInput(book1.deweycode, sizeof(book1.deweycode)))
{
break;
}
printf("Enter publisher code of book: ");
if(!getInput(book1.publisher, sizeof(book1.publisher)))
{
break;
}
printf("Enter ISBN code of book: ");
if(!getInput(book1.isbn, sizeof(book1.isbn)))
{
break;
}
list_add(list, &book1);
printf("\n");
}
printf("\n");
printf("Printing Linked List \n");
printList(list);
return EXIT_SUCCESS;
}
我收到與此代碼的錯誤是:
「不兼容類型的‘list_add’參數2」
「預計‘結構的書*’,但參數的類型爲「結構書'「。
我試圖緩解這個問題,但改變book1
到&book1
作爲建議的另一個問題,但是當我這樣做,我得到一個警告:
「
list
在這個函數中未初始化」。
這裏是我應該初始化的地方list
。
void list_init(struct list * list)
{
list = malloc(sizeof(*list));
if(list != NULL)
{
list->head = NULL;
list->num_books = 0;
}
}
這是這本書的結構:
struct book
{
char title[TITLELEN+1];
char author[AUTHORLEN+1];
char deweycode[DDCLEN+1];
char publisher[PUBLEN+1];
char isbn[ISBNLEN+1];
};
任何人都可以請幫助,並解釋爲什麼列表不被初始化?我也試過list * list = malloc(sizeof(*list))
,但那給了我另一個錯誤。
如果你不打算從'list_init'返回一個節點,那麼你需要將'list'的地址傳遞給'list_init'(例如'void list_init(struct list ** list)'。在我看來,提供靈活性來分配呼叫者的回報,或者簡單地傳遞清單的地址,這兩者都會更好。 (這是必需的,因爲第一個節點的*地址*是列表*的地址*,您目前無法從'list_init'返回)您可以執行'list * list_init(struct list ** list)'while返回'list'包含兩個基礎。 –