Итак, как говорится в названии, я должен определить тип в основном файле и каким-то образом передать его заголовку. Я пытался это сделать, но у меня нет идей.
Я определяю его так: «typedef int DATA»; и использовать его в заголовке как тип данных.
Я попытался вставить typedef перед включением заголовка, но все же он не распознается.
Есть идеи? Или это невозможно сделать таким образом?
#include #include typedef int DATA; #include "PriorityQueue.h" int main(){ int priority; DATA value;
Это начало моей основной
#ifndef PRIORITY_QUEUE_H_ #define PRIORITY_QUEUE_H_ struct priorityQueue{ int priority; DATA value; struct priorityQueue *next; }; typedef struct priorityQueue LINK; void createEmpty(LINK **head); void add(LINK **head, int p, DATA v); void deleteElement(LINK **head, int *p, DATA *v); //void print(LINK *head); void checkIfEmpty(LINK *head); void destroy(LINK *head); #endif
||=== Build: Release in PriorityQueue (compiler: GNU GCC Compiler) ===| ~\PriorityQueue\PriorityQueue.h|6|error: unknown type name 'DATA'| ~\PriorityQueue\PriorityQueue.h|11|error: unknown type name 'DATA'| ~\PriorityQueue\PriorityQueue.h|12|error: unknown type name 'DATA'| ~\PriorityQueue\PriorityQueue.c|10|error: unknown type name 'DATA'| ~\PriorityQueue\PriorityQueue.c|44|error: unknown type name 'DATA'| ||=== Build failed: 5 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===| Used ~ instead of my destination
Поместите typedef int DATA;
в PriorityQueue.h перед struct priorityQueue
и убедитесь, что PriorityQueue.h включен в PriorityQueue.c.
Обычно вы не должны этого делать, но при условии, что у вас есть все основания для этого, он работает, если вы поместите typedef перед включением. Я не знаю, как вы его протестировали, но это работает нормально для меня.
$ cat header.h
typedef struct { MYDATA a; MYDATA b; } MYSTRUCT;
$ cat main.c
typedef int MYDATA; #include "header.h" int main (int argc, char **argv) { MYSTRUCT s = {0, 1}; sa = 1; s.b++; return 0; }
Он компилируется без предупреждения и выполняет его с помощью gdb. Я вижу правильно определенные типы.