繁体   English   中英

在C中取消引用指向不完整类型错误的指针

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM