【问题标题】:Error: dereferencing pointer to incomplete type (Codeblocks, Programming in C)错误:取消引用指向不完整类型的指针(代码块,C 语言编程)
【发布时间】:2015-01-06 20:27:29
【问题描述】:

错误:取消引用指向不完整类型的指针

代码块在我创建二叉搜索树时在 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))。

【问题讨论】:

    标签: c pointers compiler-errors codeblocks binary-search-tree


    【解决方案1】:
        print_bst(tree->root);
    

    是的,这是行不通的,main.c 没有#include 任何可以告诉它tree 有一个root 元素的东西。

    解决此问题的最简单方法是将Tree 的定义移动到BST.h 中,main.c 可以访问它。

    【讨论】:

      【解决方案2】:

      主文件中包含的头文件

      #include "BST.h"
      

      不包含结构节点和树的定义。它只声明它们

      typedef struct Node Node;
      typedef struct Tree Tree;
      

      在 thsi 语句中如此

         print_bst(tree->root);
      

      编译器会报错,因为它不知道结构树是否有数据成员根。

      似乎数据成员void *dataPtr 可能会从结构节点中删除,因为它没有被使用。对于临时对象,您可以在函数中声明局部变量。

      【讨论】:

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