Так, у меня есть следующие файлы .h: StudentRosterDef.h и StudentRoster.hНе понимая это опережающее объявление, что я получаю
StudentRosterDef.h:
typedef struct Node *NodeP;
typedef struct Student *StudentP;
StudentRoster.h:
typedef struct StudentRoster *StudentRosterP;
//Below prototype creates empty studentroster and returns a NULL pointer
StudentRosterP newStudentRoster();
Теперь у меня есть следующий файл .c сопроводить: StudentRoster.c
StudentRoster.c:
#include "StudentRosterDef.h"
#include "StudentRoster.h"
struct StudentRosterP
{
NodeP root;
};
struct NodeP
{
StudentP left;
StudentP right;
};
StudentRosterP newStudentRoster()
{
StudentRosterP thisRoster = (StudentRosterP) malloc(sizeof(StudentRosterP));
thisRoster->root = 0x00;
thisRoster = 0x00;
return thisRoster;
};
Вот сообщение я получаю после запуска ССАГПЗ команды на терминале:
StudentRoster.c:27:12 : error: incomplete definition type of 'struct StudentRoster'
thisRoster->root = 0x00;
~~~~~~~~^
./StudentRoster.h:14:16: note: forward declaration of 'struct StudentRoster'
typedef struct StudentRoster *StudentRosterP;
^
1 error generated.
Файл StudentRoster.h не может быть изменено или модифицировано в любом случае, как это подается файл и .c и другие сопровождающие файлы .h должны быть построены так, чтобы точно соответствовать описанию StudentRoster.h. Спасибо за любую помощь заранее!
Даже если вы объявили псевдонимы типов, они все еще ссылаются на фактические структуры. Если код не имеет реальных структур, то он не может использовать псевдонимы типов. –
См. [Это хорошая идея для указателей typedef?] (Http://stackoverflow.com/questions/750178/is-it-a-good-idea-to-typedef-pointers/) –
Хм, я сортирую получить то, что вы говорите, но вы могли бы экстраполировать эту идею немного больше, пожалуйста @JoachimPileborg – like9orphanz