ошибка компилятора - разыменование указателя на неполный тип в программировании на C - PullRequest
2 голосов
/ 23 декабря 2010

Можете ли вы объяснить эту ошибку для меня?

В моем файле Ah:

struct TreeNode;
struct TreeHead;
typedef struct TreeNode * Node;
typedef struct TreeHead * Head;

В моем файле Ac:

struct TreeNode {
    char* theData;
    Node Left;
    Node Right;
} ;

struct TreeHead{
    int counter;
    char type;
    Node Root;
};

Head Initialisation() {
    Head treeHead;
    treeHead = malloc(sizeof (struct TreeHead));
    treeHead->Root = malloc(sizeof (struct TreeNode));
    return treeHead;
}

В моем Main.cfile:

Head head;
Node tree;
int choose =5;
head = Initialisation(); 
(head->Root) = tree; //When compiling, this line has an error: error: dereferencing pointer to incomplete type

haed-> Root вернет указатель узла, дерево также является указателем узла.Так почему же ошибка разыменовывает указатель на «неполный» тип?

Ответы [ 3 ]

3 голосов
/ 23 декабря 2010

Поскольку при компиляции main.c виден только typedef, а не определение struct Treenode (которая находится в A.c). Таким образом, компилятор не знает, что находится в структуре, и поэтому не знает, что он даже содержит корневой узел

2 голосов
/ 23 декабря 2010

Структура TreeHead определена в A.c и не видна в Main.c

Вы должны поместить его в заголовочный файл, чтобы получить к нему доступ.

0 голосов
/ 23 декабря 2010

Вы также должны поместить структуры в заголовочный файл.

Компилятор не знает точную структуру памяти структур в файле main.c, поскольку они не объявлены в заголовке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...