簡體   English   中英

將指針取消引用到不完整類型的鏈表-C

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM