Я знаю, что этот вопрос устарел, но я не могу понять, что не так с моим кодом.
У меня есть файл tree.c
со следующими struct tree
, и этот файл включает файл заголовка, в котором объявлен указатель на этот тип структуры:
дерево.с
#include "tree.h"
typedef struct tree
{
char desig[200];
int num;
tree_ptr left, right, subtree;
} Tree;
дерево.ч
#ifndef ___TREE_H___
#define ___TREE_H___
typedef struct tree *tree_ptr;
#endif
Когда я пытаюсь получить доступ к некоторому экземпляру этой структуры в другом исходном файле, компилятор выдает ошибку "указатель разыменования на неполный тип":
insert(..., instance->subtree);
Что случилось?
insert()
, видит typedef, но не фактическую структуру? - person mah   schedule 20.03.2015tree.h
, скажем, вtreeUser.c
, спросите себя: видел ли компилятор какое-либо упоминаниеsubtree
вtreeUser.c
? Илиsubtree
это совершенно неизвестная концепция при компиляцииtreeUser.c
? - person   schedule 20.03.2015tree.c
, проблем быть не должно. Если вы пытаетесь получить доступ кinstance->subtree
в каком-то другом исходном файле, аinstance
являетсяtree_ptr
, то вы нарушаете правила, и компилятор прав, наказывая вас. - person Jonathan Leffler   schedule 20.03.2015