продолжайте получать ошибки: «переопределение typedef ‘MYSTRUCT'» и «предыдущее объявление ‘MYSTRUCT’ было здесь»

#c #error-handling #struct #declaration

#c #обработка ошибок #структура #объявление

Вопрос:

я продолжаю получать ошибку, которая должна была произойти, если у меня не было предварительно объявленных структур, используемых до его определения, но я это сделал !!: «typedef struct campeonato campeonato; typedef struct jogo jogo;» (как показано в коде ниже). Кто-нибудь может сказать мне, почему я получаю следующие ошибки и что не так с моим кодом:

 c:21: error: redefinition of typedef 'campeonato'
c:5: error: previous declaration of 'campeonato' was here
c:29: error: redefinition of typedef 'jogo'
c:6: error: previous declaration of 'jogo' was here
  

и фрагмент кода, который генерирует эти ошибки, является…

 typedef struct campeonato campeonato;
typedef struct jogo jogo;

typedef struct time{
       char nome[32];
       //existe uma correspondencia entre jogos[i][] e campeonatos[i]
       jogo *jogosDeCadaCampeonato;
       campeonato *campeonatos[];
       }time;

typedef struct campeonato{
       char nome [100];
       int nro_participantes;
       int nro_jogos;
       time *times;
       jogo *jogos;
       }campeonato;

typedef struct jogo{
       time* timeA;
       time* timeB;
       time* vencedor;
       int golsA;
       int golsB;
       }jogo;
  

Ответ №1:

 typedef struct campeonato campeonato;
typedef struct jogo jogo;
  

Не является прямым объявлением. Это typedef. Прямое объявление будет просто:

 struct campeonato;
struct jogo;
  

Как и сейчас, вы дважды вводите campeonato и jogo, отсюда и ошибка.

Обратите внимание, что использование прямого объявления позволит вам использовать структуры до их определения, вам все равно придется использовать их как struct campeonato in time и struct jogo in campeonato .

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

1. Это сработало! Я знаю, что это, должно быть, было просто для вас, но большое вам спасибо, приятель. Я очень люблю Java и все еще привыкаю к c. это был мой первый вопрос в SO, и я удивлен таким быстрым ответом. 🙂