Witam wszystkich ;)
Napisałem grę Kółko i Krzyżyk.
Wszystko jest dobrze, nie ma żadnych podkreśleń...
A tu podczas kompilacji wywala mi błędy.
Kod błędu:
1>
------ Build started: Project: C'n'C, Configuration: Debug Win32 ------
1>main.obj : error LNK2005: "enum SIGN g_AktualnyGracz" (?g_AktualnyGracz@@3W4SIGN@@A) already defined in game.obj
1>main.obj : error LNK2005: "enum FIELD (* g_aPlansza)[3]" (?g_aPlansza@@3PAY02W4FIELD@@A) already defined in game.obj
1>main.obj : error LNK2005: "enum GAMESTATE g_StanGry" (?g_StanGry@@3W4GAMESTATE@@A) already defined in game.obj
1>C:\Users\user\Desktop\Programy\C++ ( GRY )\C'n'C\Debug\C'n'C.exe : fatal error LNK1169: one or more multiply defined symbols found
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Plik game.cpp:
#include <iostream>;
#include <ctime>;
#include "game.h";
using namespace std;
bool StartGry()
{
if( g_StanGry != GS_NOTSTARTED ) return false;
srand( static_cast<int>(time(NULL)));
g_AktualnyGracz == (rand() % 2 == 0 ? SGN_CIRCLE : SGN_CROSS);
g_StanGry = GS_MOVE;
return true;
}
bool Ruch( unsigned uIDPola )
{
if( g_StanGry != GS_MOVE ) return false;
if(!( uIDPola >= 1 && uIDPola <= 9)) return false;
unsigned uX = ( uIDPola - 1 ) / 3;
unsigned uY = ( uIDPola - 1 ) % 3;
if( g_aPlansza[uY][uX] == FLD_EMPTY )
g_aPlansza[uY][uX] = static_cast<FIELD>(g_AktualnyGracz );
const int WINLINE[][3][2] = { { { 0,0 }, { 0,1 }, { 0,2 } },
{ { 1,0 }, { 1,1 }, { 1,2 } },
{ { 2,0 }, { 2,1 }, { 2,2 } },
{ { 0,0 }, { 1,0 }, { 2,0 } },
{ { 0,1 }, { 1,1 }, { 2,1 } },
{ { 0,2 }, { 1,2 }, { 2,2 } },
{ { 0,0 }, { 1,1 }, { 2,2 } },
{ { 2,0 }, { 1,1 }, { 0,2 } } };
FIELD Pole, DobrePole;
int iLiczbaDobrychPol;
for( int i = 0; i <= 8; ++i)
{
DobrePole, Pole = FLD_EMPTY;
iLiczbaDobrychPol = 0;
for( int j = 0; j <=3; ++j)
{
g_aPlansza[WINLINE[i][j][0]][WINLINE[i][j][1]];
if( Pole != DobrePole )
{
DobrePole = Pole;
iLiczbaDobrychPol = 1;
}
else
++iLiczbaDobrychPol;
}
if( iLiczbaDobrychPol == 3 && DobrePole != FLD_EMPTY )
{
g_StanGry == GS_WON;
return true;
}
}
}
bool RysujPlansze()
{
if( g_StanGry == GS_NOTSTARTED ) return false;
system("CLS");
cout << " C'n'C \n";
cout << "-=+=-=+=-=+=-=+=-=+=-\n";
cout << "-----\n";
for( int i = 0; i <= 3; ++i )
{
cout << " |";
for( int j = 0; j<= 3; ++j )
{
if( g_aPlansza[i][j] == FLD_EMPTY )
{
cout << i * 3 + j + 1;
}
else
cout << static_cast<char>(g_aPlansza[i][j]);
}
cout << "|" << endl;
}
cout << "-----" << endl;
cout << "\n";
switch(g_StanGry)
{
case GS_MOVE:
cout << "Podaj ID pola w ktorym chcesz postawic: ";
cout << (g_AktualnyGracz == SGN_CROSS ? "krzyzyki" : "kolka" );
case GS_NOTSTARTED:
cout << "ZACZYNAMY !!!" <<endl;
case GS_WON:
cout << "Wygral gracz stawiajacy: ";
cout << (g_AktualnyGracz == SGN_CROSS ? "krzyżyki" : "kolka" );
case GS_DRAW:
cout << " !!! REMIS !!!" << endl;
}
return true;
}
Plik main.cpp:
#include <iostream>;
#include <conio.h>;
#include "game.h";
using namespace std;
extern GAMESTATE g_StanGry;
void main()
{
StartGry();
for(;;)
{
RysujPlansze();
if( g_StanGry == GS_MOVE )
{
unsigned int IDPola;
cin >> IDPola;
Ruch(IDPola);
}
else if( g_StanGry == GS_WON || g_StanGry == GS_DRAW )
break;
}
getch();
}
Plik game.h:
enum GAMESTATE{ GS_WON,
GS_MOVE,
GS_DRAW,
GS_NOTSTARTED };
enum SIGN{ SGN_CIRCLE = 'O',
SGN_CROSS = 'X' };
enum FIELD{ FLD_EMPTY,
FLD_CROSS = SGN_CROSS,
FLD_CIRCLE = SGN_CIRCLE} ;
bool StartGry();
bool Ruch( unsigned );
bool RysujPlansze();
FIELD g_aPlansza[3][3] = {{ FLD_EMPTY, FLD_EMPTY, FLD_EMPTY },
{ FLD_EMPTY, FLD_EMPTY, FLD_EMPTY },
{ FLD_EMPTY, FLD_EMPTY, FLD_EMPTY }};
GAMESTATE g_StanGry = GS_NOTSTARTED;
SIGN g_AktualnyGracz;
Proszę, o odnalezienie takowego "błędu" naprawienie i jeżeli można, to wyjaśnieniem dlaczego tak a nie inaczej :)
Pozdrawiam :)