Reputation: 1
I was using objects which I create along with the built-in vector type. The compiler is throwing an error complaining about the type of the variables as I am setting them as parameters in the member functions. I am not sure why as the compiler recognizes them as objects by highlighting them, so I am unsure what the error is.
Where the error is occuring
#pragma once
#include "board.h"
#include "player.h"
#include "humanPlayer.h"
#include <vector>
class Game {
private:
int winner;
int X;
int Y;
bool** playerShip;
bool** computerShip;
public:
Game(int x, int y);
void startGame();
void WinScreen();
void LossScreen();
void ByeScreen();
void gameSetUpE(Board& B, humanPlayer User);
void gameSetUpS(Board& B, humanPlayer User);
void gameSetUpH(Board& B, humanPlayer User);
int playGame(Board& B, humanPlayer P1, Player P2);
char anotherGame();
void endGame(int num, Board& B);
void setWinner(int play) { winner = play; };
void setRecords(Board& B);
int getWinner() { return winner; };
bool getUserRecordVal(int row, int col);
bool getCompRecordVal(int row, int col);
int getRecordX() { }
void endGame(vector<Game> &list);
};
humanPlayer.h
#pragma once
#include "board.h"
#include "game.h"
#include <iostream>
using namespace std;
class humanPlayer : public Player{
private:
int hitsGotten;
int winHits;
int score;
public:
humanPlayer(int hits);
void makePlayerShip(Board& B, int length);
};
humanPlayer.cpp
#include "humanPlayer.h"
humanPlayer::humanPlayer(int hits){
winHits = hits;
hitsGotten = 0;
score = 0;
}
void humanPlayer::makePlayerShip(Board& B, int length) {
int startRow;
int startCol;
char Direction;
int Dint{};
int rowNum = B.getDimY();
int colNum = B.getDimX();
cout << " Ship Length " << length << endl;
cout << "Choose a row number between 1 and " << rowNum << endl;
cin >> startRow;
cout << "Choose a column number between 1 and " << colNum << endl;
cin >> startCol;
cout << "Choose a Direction (Horizontal(H) or Vertical(V))" << endl;
cin >> Direction;
if (toupper(Direction) == 'H') {
Dint = 0;
}
else if (toupper(Direction) == 'V') {
Dint = 1;
}
if ((startRow < 1) || (startCol > B.getDimY())) {
cout << "Starting row is out of range" << endl;
cout << "Choose a row number between 1 and " << rowNum << endl;
cin >> startRow;
}
if ((startCol < 1) || (startCol > B.getDimX())) {
cout << "Starting columns is out of range" << endl;
cout << "Choose a column number between 1 and " << colNum << endl;
cin >> startCol;
}
startCol = startCol - 1;
startRow = startRow - 1;
if (Dint == 0) {
int res0 = B.makeShipH(length, startRow, startCol);
if (res0 == 0) {
makePlayerShip(B, length);
}
}
else if (Dint == 1) {
int res1 = B.makeShipV(length, startRow, startCol);
if (res1 == 0) {
makePlayerShip(B, length);
}
}
else {
cout << "Please Try again" << endl;
makePlayerShip(B, length);
}
}
Upvotes: 0
Views: 144
Reputation: 10020
You have a circular reference of header files. Game.h
includes humanPlayer.h
which includes Game.h
. This is a no no. In your case, you can simply remove the #include "Game.h"
from your humanPlayer.h
file.
In header files, only include the header files which are directly required. Do not include header files unless you are planning to use those classes/functions expressly.
On an unrelated note, please read this about namespace std.
Upvotes: 1