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