Error: dereferencing pointer to incomplete type (Codeblocks, Programming in C)
Error: dereferencing pointer to incomplete type (Codeblocks, Programming in C)
错误:取消引用指向不完整类型的指针
Codeblocks 在 main.c 第 10 行 (print_bst(tree->root)) (取消引用指向不完整类型的指针)时给我这个错误,同时我正在创建一个二进制文件搜索树,我找不到此错误的原因。
BST.h
typedef struct Node Node;
typedef struct Tree Tree;
Tree *create_bst();
Node *create_node(int data);
void insert_bst(Tree *tree);
void print_bst(Node *root);
BST.c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
void *dataPtr;
int data;
struct Node *left;
struct Node *right;
} Node;
typedef struct Tree{
int count;
Node* root;
} Tree;
Tree *create_bst()
{
Tree *tree = (Tree*) calloc(1,sizeof(Tree));
if(tree == NULL){
printf("calloc() failed!\n");
return NULL;
}
tree->count = 0;
tree->root = NULL;
return tree;
}
Node *create_node(int data)
{
Node *node = (Node*) calloc(1, sizeof(Node));
if(node == NULL){
printf("calloc() failed!\n");
return NULL;
}
node->data = data;
node->right = NULL;
node->left = NULL;
return node;
}
main.c
#include <stdio.h>
#include <stdlib.h>
#include "BST.h"
int main()
{
Tree *tree = create_bst();
while(1){
insert_bst(tree);
print_bst(tree->root);
}
return 0;
}
错误信息参考main.c中的第10行,(print_bst(tree->root)).
print_bst(tree->root);
是的,那是行不通的,main.c 没有 #include 任何可以告诉它 tree
有一个 root
元素的东西。
解决此问题的最简单方法是将 Tree
的定义移动到 BST.h
中,main.c
可以访问它。
你的头文件包含在 main
#include "BST.h"
不包含结构节点和树的定义。它只声明它们
typedef struct Node Node;
typedef struct Tree Tree;
因此在这个声明中
print_bst(tree->root);
编译器会报错,因为它不知道结构体 Tree 是否有数据成员 root。
另外,似乎数据成员 void *dataPtr
可能已从结构节点中删除,因为它未被使用。对于临时对象,您可以在函数中声明局部变量。
错误:取消引用指向不完整类型的指针
Codeblocks 在 main.c 第 10 行 (print_bst(tree->root)) (取消引用指向不完整类型的指针)时给我这个错误,同时我正在创建一个二进制文件搜索树,我找不到此错误的原因。
BST.h
typedef struct Node Node;
typedef struct Tree Tree;
Tree *create_bst();
Node *create_node(int data);
void insert_bst(Tree *tree);
void print_bst(Node *root);
BST.c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
void *dataPtr;
int data;
struct Node *left;
struct Node *right;
} Node;
typedef struct Tree{
int count;
Node* root;
} Tree;
Tree *create_bst()
{
Tree *tree = (Tree*) calloc(1,sizeof(Tree));
if(tree == NULL){
printf("calloc() failed!\n");
return NULL;
}
tree->count = 0;
tree->root = NULL;
return tree;
}
Node *create_node(int data)
{
Node *node = (Node*) calloc(1, sizeof(Node));
if(node == NULL){
printf("calloc() failed!\n");
return NULL;
}
node->data = data;
node->right = NULL;
node->left = NULL;
return node;
}
main.c
#include <stdio.h>
#include <stdlib.h>
#include "BST.h"
int main()
{
Tree *tree = create_bst();
while(1){
insert_bst(tree);
print_bst(tree->root);
}
return 0;
}
错误信息参考main.c中的第10行,(print_bst(tree->root)).
print_bst(tree->root);
是的,那是行不通的,main.c 没有 #include 任何可以告诉它 tree
有一个 root
元素的东西。
解决此问题的最简单方法是将 Tree
的定义移动到 BST.h
中,main.c
可以访问它。
你的头文件包含在 main
#include "BST.h"
不包含结构节点和树的定义。它只声明它们
typedef struct Node Node;
typedef struct Tree Tree;
因此在这个声明中
print_bst(tree->root);
编译器会报错,因为它不知道结构体 Tree 是否有数据成员 root。
另外,似乎数据成员 void *dataPtr
可能已从结构节点中删除,因为它未被使用。对于临时对象,您可以在函数中声明局部变量。