C, ошибка "конфликтующие типы для... "
Прежде чем я продолжу, вот код, который дает мне ошибку:
#define numScores 3 // the number of test scores which a student will have
struct btreenode{
int studentID; // the ID number of the student at the current node
float scores[3]; // the 3 test scores of the student
float average; // the average of the 3 test scores for the student
struct btreenode *left; // pointer to left side of the tree
struct btreenode *right; // pointer to right side of the tree
};
typedef struct btreenode *Node;
Я получаю следующую ошибку при компиляции:
btreenode.h:17: error: redefinition of 'struct btreenode'
btreenode.h:28: error: conflicting types for 'Node'
btreenode.h:28: note: previous declaration of 'Node' was here
У меня есть блочный комментарий вверху, поэтому номера строк отключены, но
строка 17 - первая строкаstruct btreenode{
"
строка 28 - последняя строкаtypedef struct btreenode *Node
"
Кто-нибудь знает, почему я получаю эти ошибки?
2 ответа
Заголовочный файл не должен быть включен более одного раза. Поэтому используйте макрос в заголовочном файле, чтобы избежать многократного включения.
#ifndef TEST_H__
#define TEST_H__
/*you header file can have declarations here*/
#endif /* TEST_H__*/
Я предполагаю, что такого подхода нет в вашем заголовочном файле.
Похоже, что ваш файл btreenode.h включается (прямо или косвенно) несколько раз... поэтому "предыдущее объявление" и "конфликтующие типы" находятся в одном и том же файле в одной строке (предыдущее объявление в первом include, конфликтующие типы, когда он встречается в той же строке на следующем include).
Вы должны использовать средства защиты заголовков (в btreenode.h), чтобы предотвратить обработку кода файла заголовка, если он уже был включен. Вверху файла добавьте:
#ifndef BTREENODE_H
#define BTREENODE_H
и в конце файла добавьте:
#endif // BTREENODE_H
Таким образом, все, что находится между ними, будет скомпилировано, только если BTREENODE_H еще не было #define
г из предыдущего включения.