Я видел вопросы о структурах, которые имеют указатели друг на друга, я много пробовал, но я просто не могу решить свою проблему. Мой мозг просто горит!Структуры, ссылающиеся друг на друга
У меня есть две различные структуры/типы: set_t
и node_t
#ifndef _SETH_
#define _SETH_
#include "node.h"
#include "list.h"
typedef struct {
list_t* list;
}set_t;
set_t* createSet(node_t*);
set_t* findSet(node_t*);
set_t* unionSet(node_t*, node_t*);
#endif
не имеют никакого node_t в моей структуре set_t, но я использую node_t в качестве параметров, поэтому я включаю node.h, как вы можете видеть. Список - это связанный список узлов, но пока это не связано с моей проблемой.
#ifndef _NODEH_
#define _NODEH_
//?? #include "set.h"
typedef struct set_t s;
typedef struct node_t{
int color;
int dist;
int key;
int date;
int end;
s* set;
struct node_t* father;
}node_t;
node_t* createNode(int);
#endif
В самом начало, я использую, чтобы включить set.h в node.h, потому что я использую набор в моей узловой структуре. Но у меня был какой-то «цикл» с включенными. Так I'im пытается использовать эту инструкцию:
typedef struct set_t s;
таким образом, чтобы избежать зацикливания проблемы.
Но на этот раз у меня есть другая проблема/предупреждение, что я думаю, что я понимаю: , когда я делаю что-то вроде (давайте предположим, что мы имеем node_t * п):
set_t* s = (set_t*)malloc(sizeof(set_t));
n->set= s;
У меня есть присваивание от несовместимого предупреждение указателя типа, возможно, потому что s является set_t *, но n-> установлено как * ...
Что я делаю неправильно? Я действительно хочу понять, как это работает, когда вы хотите включить xh в yh и yh в xh ... То же самое, если yh нуждается в xh, zh нуждается в yh, а xh нуждается в zh .. Я очень надеюсь, что я достаточно ясен для вас, ребята, чтобы помочь мне.
http://stackoverflow.com/questions/888386/resolve-circular-typedef-dependency. не нажимайте malloc return. 'void *' выполняет эту работу. не печатайте структуру дважды. делайте это только в одном заголовке. – Stargateur