Как исправить ошибку member reference base type 'AATree' (aka '_AATreeNode *') is not a structure or union
Вот исходники: AATree.h
#pragma once
typedef struct _AATreeNode
{
int key;
int level;
_AATreeNode *left;
_AATreeNode *right;
}AATreeNode, *AATree;
void aat_insertData (AATree *, int);
void aat_deleteData (AATree *, int);
AATree* aat_searchData (AATree*, int);
void aat_deleteTree (AATree *);
void aat_printTree (FILE *, AATree, int);
сама функция:
AATree* aat_searchData(AATree* bst, int key)
{
AATree* i;
i = bst;
while (i != NULL)
{
if (key == i->key)
{
printf("нашел %d\n", i->key);
return i;
}
if (key > i->key)
i = i->right;
else
i = i->left;
}
return i; // Not found.
}
Ответы (1 шт):
Автор решения: KoVadim
→ Ссылка
Если уже си, тогда структуру нужно объявлять по правилам си, где то так (обратите внимание на struct) :
typedef struct _AATreeNode
{
int key;
int level;
struct _AATreeNode *left;
struct _AATreeNode *right;
}AATreeNode, *AATree;
Теперь к собственно ошибке. Что такое i? - это указатель на AATree. А AATree - это в свою очередь указатель на структуру. Поэтому, когда Вы пишете i->key компилятор недоумевает, так как i - это struct _AATreeNode** (да, две звездочки) и так нельзя. Но можно вот так (*i)->key. С строкой вида i = i->right; чуть сложнее. Где то так i = &(*i)->right;