[英]Dereferencing Pointer to incomplete type Linked List - C
我已經嘗試了一段時間,但是找不到解決方案。 我正在建立一個鏈接列表,當我嘗試將列表作為任何內容的指針傳遞時,出現錯誤:將指針取消引用到不完整的類型。
這是我的結構聲明
typedef struct listStruct{
char *name;
int size;
boolean inRestStatus;
list *next;
}list;
和許多不起作用的功能之一。
void addToList(list *l, char * name, int size){
list *tmp;
while(l->next != NULL){
l = l->next;
}
tmp = malloc(sizeof(list));
tmp->name = name;
tmp->size = size;
tmp->inRestStatus = NO;
tmp->next = NULL;
l->next = tmp;
}
和標題
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct listStruct list;
我嘗試將struct聲明更改為
typedef struct listStruct list{
...
};
並收到以下錯誤消息:請求成員進入非結構或聯合狀態。 如果有人有什么好主意。
編輯
結構定義位於/位於函數的單獨文件中,而不是位於函數中,此后我將定義移至頭文件。
顯然,您將struct聲明放置在某個實現文件中,並且在該文件中放置了錯誤的實現文件。
標頭中的typedef聲明
typedef struct listStruct list;
聲明一個不完整的類型。 你必須把這個
typedef struct listStruct{
char *name;
int size;
boolean inRestStatus;
list *next;
} list;
進入標頭或至少進入使用結構數據字段的同一實現文件中。 現在在哪 您必須詳細描述文件結構。
看來您僅在標頭中聲明了typedef名稱
typedef struct listStruct list;
因此模塊在哪里起作用
void addToList(list *l, char * name, int size);
被定義不知道結構的定義。
例如,您必須在標題中包含結構定義
typedef struct listStruct{
char *name;
int size;
boolean inRestStatus;
struct listStruct *next;
}list;
它可以在定義函數的模塊中訪問。
考慮到這種方法
void addToList(list *l, char * name, int size){
list *tmp;
while(l->next != NULL){
l = l->next;
}
tmp = malloc(sizeof(list));
tmp->name = name;
tmp->size = size;
tmp->inRestStatus = NO;
tmp->next = NULL;
l->next = tmp;
}
也錯了。 例如l可以等於NULL嗎?
也是簡單的復制指針
tmp->name = name;
看起來可疑。 您是否應該分配內存來存儲參數名稱指向的字符串的副本?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.