开发者

compiler error - dereferencing pointer to incomplete type In C programming

开发者 https://www.devze.com 2023-01-31 18:36 出处:网络
Can you explain this error for me? In my A.h file: struct TreeNode; struct TreeHead; typedef struct TreeNode * Node;

Can you explain this error for me?

In my A.h file:

struct TreeNode;
struct TreeHead;
typedef struct TreeNode * Node;
typedef struct TreeHead * Head;

In my A.c file:

struct TreeNode {
    char* theData;
    Node Left;
    Node Right;
} ;

struct TreeHead{
    int counter;
    char type;
    Node Root;
};

Head Initialisation() {
    Head treeHead;
    treeHead = malloc(sizeof (struct TreeHead));
    treeHead-&开发者_如何学Gogt;Root = malloc(sizeof (struct TreeNode));
    return treeHead;
}

In my Main.c file:

Head head;
Node tree;
int choose =5;
head = Initialisation(); 
(head->Root) = tree; //When compiling, this line has an error: error: dereferencing pointer to incomplete type

haed->Root will return a Node pointer, tree is also a Node pointer. So why error is dereferencing pointer to "incomplete" type?


Because in compiling main.c, only the typdef is visible, not the definition of struct Treenode (which is in A.c). So the compiler does not know what is in the struct, and so does not know it even contains a Root node


The TreeHead struct is defined in A.c and is not visible in Main.c

You have to put it in a header file to access it.


You have to put the structs into the header file as well.

The compiler does not know the exact memory layout of the structs in the main.c file, because they are not declared in the header.

0

精彩评论

暂无评论...
验证码 换一张
取 消