class — структурирование классов для крестики-нолики (c ++)

я изучал C ++ с ‘C ++ Программирование для
Абсолютный Новичок », которые были очень полезны, кто бы что ни делал, когда дело доходит до ООП и разделения классов на разные файлы, это не очень хорошо объясняет это.

это код, который у меня есть, я не все здесь поместил, только проблемные вещи. Странно то, что, если я исключаю Juego.h и Juego.cpp из проекта, он позволяет мне создавать его, но если я его включаю, я получаю следующие ошибки.

jugador.h(8): error C2146: syntax error : missing ';' before identifier 'c_o'
jugador.h(8): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
jugador.h(9): error C2061: syntax error : identifier 'casilla'
juego.cpp(15): error C2039: 'c_o' : is not a member of 'Jugador'
jugador.h(5) : see declaration of 'Jugador'

Поскольку это происходит только с Juego.h в коде, я думаю, проблема в том, что я плохо структурировал заголовочные файлы. Я был в состоянии решить многие проблемы с поиском в Google, но я не могу это исправить, я даже получаю синтаксические ошибки.

//Jugador.h
#include <string>
using std::string;

class Jugador
{
public:
string p_name;
//casilla is X,O or blankspace, done using enum in Tablero.h( it have to be in a cpp file)
casilla c_o;
Player(string name, casilla marca);
void turno(Tablero* tabla);
};//Jugador.cpp
#include "Jugador.h"#inlcude "Tablero.h"#include <string>

using std::string;

Jugador::Jugador(string nombre,casilla marca): p_name(nombre), c_o(marca) {}

void Jugador::turno(Tablero* tabla)
{

using std::cout;
using std::cin;
int fil;
int col;
do
{
cout << p_name.c_str() <<" en que fila quieres jugar(1-2-3)?\n";
cin >> fil;
cout<<p_name.c_str()  <<" en que columna quieres jugar(1-2-3)?\n";
cin >> col;
}while(tabla->tab[fil-1][col-1]==vacia);
tabla->tab[fil-1][col-1]=c_o;
}//Juego.h
class Jugador;
class Tablero;

class Juego
{
public:
Juego(void);
bool ganador(Jugador* player, Tablero* tabla);
bool fin(Tablero* tabla);
};//Juego.cpp
#include "Juego.h"#include "Jugador.h"#include "Tablero.h"
Juego::Juego() {}

bool Juego::ganador(Jugador* player, Tablero* tabla)
{
using std::cout;
using std::cin;casilla marca_jug = player->c_o;
bool winner = false;

//...
// if-else structure which set winner to true if the conditons to win are achived

if (winner)
cout<<player->p_name.c_str()<<" ha ganado!!!!\n";

return winner;
}

//if there isnt any blank square, ends the game
bool Juego::fin(Tablero* tabla)
{
bool fin_juego=false;

for(int fil=0; fil<3; fil++)
{
for(int col=0; col<3; col++)
{
if(tabla->tab[fil][col]==vacia)
fin_juego=true;
}
}

return fin_juego;
}

Я из Кубы, поэтому есть переменные имени на испанском языке. Если вам это нужно, я могу сделать полный перевод.
Как я уже сказал, это не весь код, я не хотел иметь больше вещей, которые нужны

Просто чтобы прояснить ситуацию, я собираюсь добавить tablero.h. Вот где определен casilla. Касилла — это двумерный массив.

//Tablero.h
#include <iostream>
#include <string>

enum casilla {vacia,X,O};

class Tablero
{
public:
casilla tab[3][3];
Tablero(void);
void draw(void);
};//Tablero.cpp
#include "Tablero.h"
Tablero::Tablero(void)
{
using std::cout;
casilla tab[3][3];
for(int f=0;f<3;f++)
{
for (int c= 0;c<3;c++)
{
tab[f][c]=vacia;
}
}
}

void Tablero::draw(void)
{
using std::cout;
using std::string;
for(int f=0;f<3;f++)
{
for (int c= 0;c<3;c++)
{
string s;
if (c!=2)
{
switch (tab[f][c])
{
case vacia: s=" "; break;
case X: s="X"; break;
case O: s="O";break;
}
cout << s.c_str() <<" | ";
}
else
{
switch (tab[f][c])
{
case vacia: s=" "; break;
case X: s="X"; break;
case O: s="O"; break;
}
cout << s.c_str() <<"\n";
}
}
}
}

1

Решение

Давайте посмотрим на первую ошибку.

//Jugador.h
#include <string>
using std::string;

class Jugador
{
public:
string p_name;
//casilla is X,O or blankspace, done using enum in Tablero.h( it have to be in a cpp file)
casilla c_o;

На данный момент компилятор не знает, что такое casilla. Возможно, он находится в каком-то другом файле, который также должен быть включен перед любым его использованием:

//Jugador.h
#include <string>
#include <where-casilla-is-from>
using std::string;
...
1

Другие решения

Других решений пока нет …