繁体   English   中英

C取消引用指向不完整类型结构的指针

[英]C dereferencing pointer to incomplete type struct

在 tree.h 头文件中,我声明了“struct privates”以隐藏全局变量。 (相关片段)

 struct privates;
  /*
   * a tree
     */

    typedef struct tree_node
    {
        struct tree *left; 
        struct tree *right; 
        struct tree_node *left; 
        struct tree_node *right; 
        float * info;  
        float distance_to_neighbor;
    } tree_node;


  typedef struct tree
  {
   /*in order to  keep track of the kd-tree root*/
   tree_node * _root; 
   /*pointer to internal variables struct*/
   struct privates* _privates;  

  } tree;

struct privates* init_heap_tree();

etc....

在实现文件 kdtree.c 中,我定义了“struct privates”:(相关代码段)

tree* my_tree=NULL; 

typedef struct  privates
{

/*variables*/
int current_number_of_tree_nodes; 
/*previous tree rebuild's node count*/ 
int previous_tree_size;
} privates; 


privates* init_heap_tree()
  {
      return (privates*) calloc(1, sizeof (privates));
  }


tree* tree_get_tree()
{
    my_tree = get_pre_allocated_tree();
    return my_tree;  
}

etc...

现在在内存管理代码中,查看 init_heap() 的相关片段。

我正在尝试为结构成员“tree_space->_privates->current_number_of_tree_nodes = 0;”设置初始化值

void
init_heap (int max_dimensions)
{
    tree_space = (tree *) calloc (tree_HEAP_SIZE, sizeof (tree));
    tree_space = get_pre_allocated_tree();
    tree_space->_privates = init_heap_tree();
    //THIS  IS WERE COMPILE  TIME ERROR OCCURS
    tree_space->_privates->current_number_of_tree_nodes = 0; 
    tree_space->_privates->previous_tree_size =0;  
    //allocate memory based on tree_HEAP_SIZE
    tree_space = (tree_node*) calloc (tree_HEAP_SIZE, sizeof (tree_node));
    tree_set_k_dimensions (max_dimensions);

etc...

}

“错误:取消引用指向不完整类型“结构私有”的指针

我不想要任何其他的信息隐藏设计模式,如何通过结构成员访问解决此错误?

太感谢了。

只有 kdtree.c 中的函数可以访问private的成员,因此您需要在那里进行初始化。

privates* init_heap_tree()
{
    privates *rval = calloc(1, sizeof (privates));
    rval->current_number_of_tree_nodes = 0;
    rval->previous_tree_size = 0; 
    return rval;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM