переопределение typedef с разными типами (‘struct word’ vs ‘struct word’) };

#c

#c

Вопрос:

У меня возникли трудности с этим одним назначением, и я продолжаю получать ошибку всякий раз, когда я создаю связанный список с другими структурами.

LinkedList.c

 #include "sentence.c"

typedef struct{
    sentence *first;
    int numSentences;
}LinkedList;
 

Предложение.c

 #include "word.c"

typedef struct{
  word *sentence;
  int lineNumber;
  int numWords;
}sentence;
 

Word.c

 typedef struct{
  char *word;
  int numCharacters;
  int wordPos;
}word;
 

У меня возникают проблемы только при реализации части связанного списка, когда я компилирую со структурами предложений и слов, они работают нормально. Я нигде не инициализирую связанный список, и он по-прежнему выдает эту ошибку как для предложения, так и для слова:

введите описание изображения здесь

Я не совсем уверен, что означает эта ошибка, поскольку я не верю, что я повторно объявляю ее где-либо еще.

Комментарии:

1. невозможно воспроизвести: repl.it/@WilliamLynch1/SlushyWatchfulInterchangeability .

2. Вы не должны #включать файлы «.c». #включение только для файлов «.h». Но это, скорее всего, не причина ошибки, хотя это упростит устранение неполадок. Скорее всего, вы включаете word.c в 2 других файла — прямо или косвенно.

3. Добавьте свой код в .h файлы (для соглашения) и поместите их в защиту заголовка , чтобы они не включались несколько раз.

4. Ни один из типов, которые вы показываете, не является struct sentence (у вас нет тега ни в одной из структур, хотя одной из структур без тегов (анонимных) присваивается имя typedef of sentence . Ошибка, похоже, не соответствует показанному вами коду.

5. OT: большинство отладчиков не могут отображать поля внутри структуры, если у структуры нет имени тега

Ответ №1:

Вы не должны #включать файлы «.c». #include используется только для файлов «.h».

Но это, скорее всего, не основная причина ошибки, хотя невыполнение этого упростит устранение неполадок.

Скорее всего, вы включаете word.c в 2 других файла — прямо или косвенно

Вы также должны ввести практику добавления защитных элементов включения для файлов заголовков, чтобы исправить несколько включений одного и того же заголовка.

Ответ №2:

  • Никогда не включайте файлы #include .c, никогда. Никаких исключений.
  • Поместите typedef, к которым должны быть доступны другие файлы, в файл .h, например word.h или sentence.h.
  • Не самая блестящая идея присвоить члену структуры тот же идентификатор, что и типу структуры, в которой он находится.