[C++] Błędy w module - TicTacToe

0

Piszę grę "Kółko i Krzyżyk" jednak w module mojej gry wyskakują błędy kompilacji z którymi nie potrafię sobie poradzić, szukałem w google podobnych problemów jednak nie przyniosło to skutku, dlatego zwracam się do was z prośbą o wskazanie gdzie leży problem.

Kod modułu game.cpp

#include "game.h"
#include <cstdlib>
#include <iostream>        
class CPlansza {
      private:
              POLE m_aPlansza[][];
              const LINIE[][][];
      public:
             CPlansza() {
                        m_aPlansza[3][3] = { { PUSTE, PUSTE, PUSTE },
                                             { PUSTE, PUSTE, PUSTE },
                                             { PUSTE, PUSTE, PUSTE } };
                        const LINIE[][ 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 } } };
                                             }
             bool SprawdzPole( unsigned uY, unsigned uX ) {
                  if ( m_aPlansza[uY][uX] == PUSTE ) return true;
                  else return false;
                  }
             void Ustaw( unsigned uY, unsigned uX, ZNAK Gracz ) {
                  m_aPlansza[uY][uX] = static_cast<POLE>(Gracz);
                  }  
             POLE SprawdzLinie( int i, int j ) {
                  return m_aPlansza[LINIE[i][j][ 0 ]][LINIE[i][j][ 1 ]];
                  }
             POLE PobierzPole( int i, int j ) {
                  return m_aPlansza[i][j];
                  }
             };
class CGame {
      private:
              CPlansza* m_pPlansza;
              STATUS *m_pStatus;
              ZNAK *m_pAktualnyGracz;
      public:
             CGame() {
                     m_pPlansza = new CPlansza;
                     m_pStatus = new STATUS;
                     m_pAktualnyGracz = new ZNAK;
                     }
             ~CGame() {
                      delete m_pPlansza;
                      delete m_pGracz1;
                      delete m_pGracz2;
                      delete m_pStatus;
                      delete m_pAktualnyGracz;
                      }
             bool Start() {
                  if ( *m_sStatus != NIEZACZETA ) return false;
                  srand(time(0));
                  *m_pAktualnyGracz = (rand() % 2 == 0 ? Z_KOLKO : Z_KRZYZYK );
                  else {
                       m_pGracz1->UstawZnak( Z_KRZYZYK );
                       m_pGracz2->UstawZnak( Z_KOLKO );
                       }
                  *m_pStatus = ZACZETA;
                  return true;
                  }
             bool Ruch( unsigned uPole ) {
                  if ( *m_pStatus != ZACZETA ) return false;
                  if ( uPole < 1 ) return false;
                  if ( uPole >9 ) return false;
                  unsigned uY = ( uPole - 1 ) / 3;
                  unsigned uX = ( uPole -1 ) % 3;
                  if ( m_pPlansza->SprawdzPole( uY, uX ) == true ) m_pPlansza->Ustaw( uY, uY, *m_pAktualnyGracz);
                  else return false;
                  POLE Pole, ZgodnePole;
                  unsigned uZgodnychPol;
                  for ( int i=0; i<8; ++i ) {
                      Pole = ZgodnePole = PUSTE;
                      uZgodnychPol = 0;
                      for ( int j=0; j<3; ++j ) {
                          Pole = m_Plansza->PobierzPole( i, j );
                          if ( Pole != ZgodnePole ) {
                               ZgodnePole = Pole;
                               uZgodnychPol = 1;
                               }
                          else ++uZgodnychPol;
                          }
                      if ( uZgodnychPol == 3 && ZgodnePole != PUSTE ) {
                           *m_nStatus = WYGRANA;
                           return true;
                           }
                  unsigned uZapelnionePola = 0;
                  for ( int i=0; i<3; ++i ) {
                      for ( int j=0; j<3; j++ ) {
                          if ( m_pPlansza->PobierzPole( i, j ) != PUSTE ) ++uZapelnionePola;
                          }
                      }
                  if ( uZapelnionePola == 9 ) {
                       *m_nStatus = REMIS;
                       return true;
                       }
                  *m_pAktualnyGracz = (*m_pAktualnyGracz == Z_KOLKO ? Z_KRZYZYK : Z_KOLKO);
                  return true;
                  }      
             void Rysuj() {
                  system("cls");
                  std::cout << " KOLKO I KRZYZYK " << std::endl;
                  std::cout << "---------------------" << std::endl;
                  std::cout << std::endl; 
                  std::cout << " -----" << std::endl;
                  for ( int i = 0 ; i < 3 ; ++i) {
                      std::cout << " |" ;
                      for ( int j = 0 ; j < 3 ; ++j) {
                          if ( *m_pPlansza->PobierzPole( i, j ) == PUSTE ) {
                               std::cout << i * 3 + j + 1 ;
                               }
                          else {
                               std::cout << static_cast<char>(*m_pPlansza->PobierzPole( i, j ));
                               }
                          }
                      std::cout << "|" << std::endl;
                      }
                      std::cout << " -----" << std::endl;
                      std::cout << std::endl;
                      switch ( *m_sStatus ) {
                             case GS_MOVE:
                                  std::cout << "Podaj numer pola, w ktorym" << std::endl;
                                  std::cout << "chcesz postawic ";
                                  std::cout << ( *m_pAktualnyGracz == Z_KOLKO ? "kolko" : "krzyzyk" ) << ": ";
                                  break;
                             case GS_WON:
                                  std::cout << "Wygral gracz stawiajacy ";
                                  std::cout << ( *m_pAktualnyGracz == Z_KOLKO ?
                                  "kolka" : "krzyzyki" ) << "!" ;
                                  break;
                             case GS_DRAW:
                                  std::cout << "Remis!";
                                  break;
                                  }
                  }
             };

Kod nagłówku game.h

#include <iostream>
#ifndef game_h
#define game_h
enum ZNAK { Z_KOLKO = 'O', Z_KRZYZYK = 'X' };
enum POLE { KOLKO = Z_KOLKO, KRZYZYK = Z_KRZYZYK, PUSTE };
enum STATUS { NIEZACZETA, ZACZETA, WYGRANA, REMIS };
class CPlansza {
      private:
              POLE m_aPlansza;
      public:
             CPlansza();
             bool SprawdzPole( unsigned uY, unsigned uX );
             void Ustaw( unsigned uY, unsigned uX, ZNAK Gracz );
             POLE SprawdzLinie( int i, int j );
             POLE PobierzPole( int i, int j );
             };   
class CGame {
      private:
              CPlansza* m_pPlansza;
              STATUS *m_pStatus;
              ZNAK *m_pAktualnyGracz;
      public:
             CGame();
             ~CGame();
             bool Start();
             bool Ruch( unsigned uPole );
             void Rysuj();
             };        
#endif

Błędy przy kompilacji to:
22 C:\Dev-Cpp\Obiektowe\game.cpp redefinition of class CPlansza' 16 C:\Dev-Cpp\Obiektowe\game.h previous definition of class CPlansza'
54 C:\Dev-Cpp\Obiektowe\game.cpp redefinition of class CGame' 26 C:\Dev-Cpp\Obiektowe\game.h previous definition of class CGame'
171 C:\Dev-Cpp\Obiektowe\game.cpp expected }' at end of input 171 C:\Dev-Cpp\Obiektowe\game.cpp expected unqualified-id at end of input 171 C:\Dev-Cpp\Obiektowe\game.cpp expected ,' or `;' at end of input

Używam Dev-Cpp . Z góry dzięki wszystkim za pomoc.

0

A nie umiesz czytać? Dwa razy (w pliku game.h i w game.cpp) masz definicję klasy CPlansza i CGame.
W game.cpp pewnie chciałeś mieć tylko definicje metod. Podtrzymuję swoje stanowisko ze jak ktos nie umie to nie powinien pisać kodów które maja wiecej niż 20 linijek.

//A.h
class A
{
  private:
    int pole;
  public:
    int metoda1();
    void metoda2();
};

//A.cpp
int A::metoda1()
{
  return 1;
}

void A::metoda2()
{
  this->pole = 1;
  cout<<";]";
}
0

Ehh, błędy są jasne. Masz dwa razy definicję klas.
Definicję klas umieszcza się w pliku nagłówkowym, a w pliku cpp umieszczasz implementacje funkcji tych klas.
Wygląda to mniej więcej tak
plik cpp
CPlansza::CPlansza()
{ //cialo konstruktora }

typ_zwracany nazwa_klasy::nazwa_funkcji (argumenty)
{
//cialo
}

np. bool CPlansza::Ruch( unsigned uPole )
{ }</quote>

Jest jeszcze masa innych błędów

  POLE m_aPlansza[][];
              const LINIE[][][];

//....
delete m_pGracz1;
delete m_pGracz2;


1 użytkowników online, w tym zalogowanych: 0, gości: 1