C Error C2371 redefinition

Error 2 error C2371: 'QixC': redefinition; different basic types line 5
Error 5 error C2371: 'QixC': redefinition; different basic types line 5
Error 13 error C2371: 'QixC': redefinition; different basic types line 5

This is the part of the file Game.h:

#include "Graphics_Console.h"
#include <stdio.h>
#include <conio.h>

typedef struct
{
int X;
int Y;
}QixC;
typedef struct
{
int X;
int Y;
}CCursor;

And I use them in Game.c :

#include "Game.h"
#include <stdio.h>
#include <conio.h>
#include <time.h>
int QIX(int nivell)
{
QixC Qix;
CCursor Cursor;
HANDLE hScreen;
int DirQixX,DirQixY;
int IniciX,IniciY;
int FiX, FiY;
int DirStix=0;
int Area=0,AreaTotal=0,AreaObjectiu=(FI_X-INICI_X)*(FI_Y-INICI_Y)*0.75;
int Pantalla=1;
int Puntuacio=0;
int tecla=0;
int viu=1;
int NCops=0, Velocitat=1000/(nivell*0.70);
int XocStix=0;
char continuar[1];

hScreen = GetStdHandle(STD_OUTPUT_HANDLE);
InitScreen(hScreen);
do
{
    system("CLS");
    IniciX=INICI_X,IniciY=INICI_Y;
    FiX=FI_X, FiY=FI_Y;
    Cursor.X=INICI_X+(FiX-INICI_Y)/2,Cursor.Y=FI_Y;

    DibuixarRectangle(IniciX,IniciY,FI_X,FI_Y,hScreen);
    InfoPuntsPartida(hScreen, Puntuacio);
    InfoPantallaPartida(hScreen, Pantalla);

    Qix.X=Aleatori(IniciX+1,FiX-1),Qix.Y=Aleatori(IniciY+1,FiY-1);
    InicialitzarDirQix(&DirQixX,&DirQixY);
    PintarQix(Qix,hScreen);
    PintarCursor(Cursor.X,Cursor.Y,hScreen);

    do{
        if(_kbhit())
        {   
            tecla=LlegirEvent();
            TractarEvent(tecla,Cursor,&IniciX,&IniciY,&FiX,&FiY,Qix,&DirStix,&Area,hScreen);
            if(Area)
            {
                Puntuacio=Puntuacio+Area;
                AreaTotal+=Area;
                Area=0;
                InfoPuntsPartida(hScreen,Puntuacio);
            }
        }
        NCops++;
        if(NCops==Velocitat)
        { 
            if(DirStix!=0)
                XocStix=QiXXocStiX(Qix,Cursor,DirStix);
            if(!XocStix)
                MoureQix(Qix,&DirQixX,&DirQixY,IniciX,IniciY,FiX,FiY,hScreen);
            else
                viu=0;
            NCops=0;
        }
    }while((tecla!=TECLA_q)&&(tecla!=TECLA_Q)&&viu &&(AreaTotal<AreaObjectiu));
    GameOver(hScreen);
    TextColor(LIGHTGREY,BLACK,hScreen);
    GotoXY(0,FI_Y+1,hScreen);
    return Puntuacio;
    system ("PAUSE");
    printf("Continuar?(s/n)");
    scanf("%c",&continuar);
}while(continuar!="s");
}

Sorry for the foreign words and names, english is not my first language. I can't see where is redefined. They don't appear anywhere else,but are passed as parameters to some functions. Any help, please?

Upvotes: 0

Views: 2227

Answers (1)

simonc
simonc

Reputation: 42175

Try guarding your header against multiple inclusion.

#ifndef GAME_H
#define GAME_H

#include "Graphics_Console.h"
#include <stdio.h>
#include <conio.h>

typedef struct
{
    int X;
    int Y;
}QixC;

typedef struct
{
    int X;
    int Y;
}CCursor;

#endif /* GAME_H */

By default, if you include multiple headers which directly or indirectly include your header, you'll get multiple competing (if identical) versions of its structures and functions. You can avoid this by starting your header

#ifndef SOMETHING_UNIQUE_TO_YOUR_HEADER
#define SOMETHING_UNIQUE_TO_YOUR_HEADER

and ending it

#endif /* SOMETHING_UNIQUE_TO_YOUR_HEADER */

which guarantees that any source file will include at most a single copy of your structures.

Upvotes: 2

Related Questions