C语言头文件中重复定义struct,但是我只在头文件这定义了struct阿,怎么办
//头文件
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<math.h>
#define NUM 5
#define PI 3.14
void initBall(struct BALL ball[],int num);
int moveBall(struct BALL ball[],int num);
void redrawCWin(struct BALL ball[],int num);
void delay(int nTime);
int randX(void);
int randY(void);
int randA(void);
int randC(void);
double distBetweenBalls(struct BALL ball[],int k,int i);
void initCharPicture(char cWin[24][80]);
struct BALL
{
char body[2];
int sel;
int wX;
int wY;
double X;
double Y;
double dX;
double dY;
};
//子函数
#include "head.h"
void initBall(struct BALL ball[],int num)
{
int i,j;
for(i=0;i<NUM;i++)
{
j=randA();
ball[i].body[0]='@';
ball[i].body[1]='*';
ball[i].sel=randC();
ball[i].X=randX();
ball[i].Y=randY();
ball[i].wX=(int)(ball[i].X+0.5);
ball[i].wY=(int)(ball[i].Y+0.5);
ball[i].dX=cos((j*PI)/180);
ball[i].dY=sin((j*PI)/180);
}
}
int randX()
{
int a;
a=rand()%22+1;
return a;
}
int randY()
{
int a;
a=rand()%77+1;
return a;
}
int randA()
{
int a;
a=rand()%359+1;
return a;
}
int randC()
{
int a;
a=rand()%2;
return a;
}
double distBetweenBalls(struct BALL ball[],int k, int i)
{
double dist;
dist=sqrt((ball[k].X-ball[i].X)*(ball[k].X-ball[i].X)+(ball[k].Y-ball[i].Y)*(ball[k].Y-ball[i].Y));
return dist;
}
int moveBall(struct BALL ball[],int num)
{
int i;
int t=0;//
for(i=0;i<num;i++)
{
ball[i].X+=ball[i].dX;
ball[i].Y+=ball[i].dY;
}
for(i=0;i<num;i++)
{
if(ball[i].X>23)
{
putchar('\a');
t++;
}
if(ball[i].X<0||ball[i].X>23)
{
ball[i].dX=-ball[i].dX;
ball[i].X+=ball[i].dX;
}
if(ball[i].Y<0||ball[i].Y>79)
{
ball[i].dY=-ball[i].dY;
ball[i].Y+=ball[i].dY;
}
else
{
ball[i].wX=(int)(ball[i].X+0.5);
ball[i].wY=(int)(ball[i].Y+0.5);
}
int j;
for(j=i+1;j<num;j++)
{
double dist=distBetweenBalls(ball,i,j);
if(dist<1)
{
double swap;
swap=ball[i].dX;
ball[i].dX=ball[i].dY;
ball[i].dY=swap;
if(ball[i].sel==0)
ball[i].sel=1;
else
ball[i].sel=0;
swap=ball[j].dX;
ball[j].dX=ball[j].dY;
ball[j].dY=swap;
if(ball[i].sel==0)
ball[j].sel=1;
else
ball[j].sel=0;
}
}
ball[i].wX=(int)(ball[i].X+0.5);
ball[i].wY=(int)(ball[i].Y+0.5);
}
return t;
}
void redrawCWin(struct BALL ball[],int num)
{
char cWin[24][80];
initCharPicture(cWin);
moveBall(ball,num);
int i,j;
for(j=0;j<num;j++)
cWin[ball[j].wX][ball[j].wY]=ball[j].body[ball[j].sel];
for(i=0;i<24;i++)
{
puts(cWin[i]);
}
}
void delay(int nTime)
{
int i,j;
for(i=0;i<nTime;i++)
for(j=0;j<200000;j++);
}
void initCharPicture(char cWin[24][80])
{
int i,j;
for(i=0;i<24;i++)
{
cWin[i][79]='\0';
cWin[i][0]='|';
cWin[i][78]='|';
}
for(i=1;i<78;i++)
{
cWin[0][i]='-';
cWin[23][i]='-';
}
for(i=1;i<23;i++)
{
for(j=1;j<78;j++)
{
cWin[i][j]='.';
}
}
}
//主函数
#include "head.h"
#include "Myfuncs.cpp"
#include "time.h"
void main()
{
int n;
printf("请输入弹球数目:");
scanf("%d",&n);
if(n<1)
n=1;
if(n>NUM)
n=NUM;
srand((unsigned)time(NULL));
struct BALL ball[NUM];
initBall(ball,n);
while(1)
{
delay(2000000);
redrawCWin(ball,n);
}
}