В заголовке 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...
}
» ошибка: разыменование указателя на неполный тип «struct privates»
Мне не нужен какой-либо другой шаблон проектирования для скрытия информации perse, Как я могу разрешить эту ошибку с помощью доступа к элементу структуры?
Спасибо, миллион.