[英]Dereferencing pointer to incomplete type error in C
當我嘗試訪問我定義的結構中的字段時,我遇到了這個錯誤:
struct linkNode{
struct linkNode *next;
char *value;
};
在頭文件中,我定義了一個名為linkNode_t的類型:
typedef struct linkNode linkNode_t;
當我試圖在另一個文件的主要部分中使用這個結構時,其他一切都很好,除非我試圖這樣做
linkNode_t* currentpath = /*a pointer to a struct of type linkNode_t*/
int something = strlen(currentpath->value);/****ERROR*****/
編譯器給了我不完整的類型錯誤。 我是否正確地宣布了結構?
在執行typedef之前,必須在頭文件中聲明Struct。 你可以把兩者結合起來
typedef struct linkNode {
struct linkNode *next;
char *value;
} linkNode_t;
正如其他人所指出的那樣,將“typedef”和結構定義全部放在同一個地方通常會更好。
但這不是必需的,這不是問題。
此測試用例編譯並正確運行:
#include <stdio.h>
#include <string.h>
#define NULL 0
struct linkNode{
struct linkNode *next;
char *value;
};
typedef struct linkNode linkNode_t;
linkNode_t rec = {
NULL,
"abcdef"
};
int
main (int argc, char *argv[])
{
linkNode_t* currentpath = &rec;
int something = strlen(currentpath->value);
printf ("sizeof (rec)= %d, currentpath->value= %s, something= %d...\n",
sizeof (rec), currentpath->value, something);
return 0;
}
實際問題和解決方案:
1)你正在做所有正確的事情。
2)確保在結構定義之后 (或者至少作為其一部分)放置“typedef”:
struct linkNode{
...
};
typedef struct linkNode linkNode_t;
struct linkNode{
struct linkNode *next;
char *value;
};
這是不完整的,因為您不能直接在結構中使用struct。
你應該用
typedef struct linkNode{
struct linkNode *next;
char *value;
}new_name;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.