簡體   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