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 "에 대한 포인터 역 참조
정보를 숨기는 다른 디자인 패턴을 원하지 않습니다. 구조체 멤버 액세스로이 오류를 어떻게 해결할 수 있습니까?
정말 감사합니다.
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;
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다