0
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

これは、ファイル 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;

そして、私はそれらを 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");
}

外国語と名前で申し訳ありません。英語は私の母国語ではありません。どこが再定義されているのかわかりません。これらは他の場所には表示されませんが、一部の関数にパラメーターとして渡されます。何か助けてください。

4

1 に答える 1

2

複数のインクルードからヘッダーを保護してみてください。

#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 */

デフォルトでは、ヘッダーを直接的または間接的にインクルードする複数のヘッダーをインクルードすると、その構造と関数の複数の競合する (同一の場合) バージョンが取得されます。ヘッダーを開始することでこれを回避できます

#ifndef SOMETHING_UNIQUE_TO_YOUR_HEADER
#define SOMETHING_UNIQUE_TO_YOUR_HEADER

そしてそれを終わらせる

#endif /* SOMETHING_UNIQUE_TO_YOUR_HEADER */

これにより、どのソース ファイルにも構造のコピーが 1 つだけ含まれることが保証されます。

于 2012-12-16T22:48:32.657 に答える