继续得到错误:“重新定义typedef'MYSTRUCT'”和“之前的'MYSTRUCT'声明在这里”

时间:2011-10-14 19:17:31

标签: c error-handling struct declaration

如果我没有预先声明之前它的定义,我会继续得到一个应该发生的错误,但我做了!!:“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 个答案:

答案 0 :(得分:2)

typedef struct campeonato campeonato;
typedef struct jogo jogo;

不是前瞻性声明。这是一个typedef。前瞻性声明只是:

struct campeonato;
struct jogo;

就像现在一样,你两次输入campeonato和jogo,因此错误。

请注意,使用前向声明将允许您在结构定义之前使用结构,您仍然必须将它们用作struct campeonato中的timestruct jogo campeonato中的{{1}} 1}}。