【问题标题】:Dereferencing pointer to incomplete type error in C在 C 中取消引用指向不完整类型错误的指针
【发布时间】:2013-01-28 05:40:02
【问题描述】:

当我试图访问我定义的结构中的字段时遇到了这个错误:

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*****/

编译器给了我不完整的类型错误。我是否正确声明了结构?

【问题讨论】:

  • 您的头文件中似乎没有 struct linkNode 定义。

标签: c struct


【解决方案1】:

Struct 必须在 header 中声明,然后再进行 typedef。您可以将两者结合起来:

typedef struct linkNode {
    struct linkNode *next;
    char *value;
} linkNode_t;

【讨论】:

    【解决方案2】:

    正如其他人指出的那样,通常最好将“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”AFTER(或至少作为结构定义的一部分)放入:

    struct linkNode{
    ...
    };
    
    typedef struct linkNode linkNode_t;
    

    【讨论】:

      【解决方案3】:
      struct linkNode{
          struct linkNode *next;
          char *value;
      };
      

      这是不完整的,因为您不能直接在结构内部使用 struct。

      你应该使用

      typedef struct linkNode{
          struct linkNode *next;
          char *value;
      }new_name;
      

      【讨论】:

        猜你喜欢
        • 2018-05-31
        • 2017-11-02
        • 1970-01-01
        • 1970-01-01
        • 2011-04-06
        • 1970-01-01
        • 2016-07-12
        相关资源
        最近更新 更多