我尝试将友情设置为GameSimulator
类上的课程Player
的方法。
由于某种原因我收到了错误。
#ifndef GAMESIMULATOR_H_
#define GAMESIMULATOR_H_
#define NULL 0
#include "Player.h"
class GameSimulator {
public:
void runSimulation();
static GameSimulator* createGame();
bool saveSession(string); // returns failure or successful
bool loadSession(string); // returns failure or successful
friend ostream& operator <<(ostream& out,GameSimulator& gs);
private:
~GameSimulator();
GameSimulator();
static GameSimulator* game;
Player* *Population;
unsigned numOfPlayers[4];
int scores[4];
unsigned numGeneration;
unsigned numRounds;
};
#endif /* GAMESIMULATOR_H_ */
#ifndef PLAYER_H_
#define PLAYER_H_
// includes
#include <iostream>
using namespace std;
enum PlayerType {row,col}; // player type
enum Strategy {TrustingFool,nasty,rnd,winStayLooseShift,titForTwoTats}; // strategy type
enum Move {Cooparate , Defect}; // move type
//#include "GameSimulator.h"
class GameSimulator;
class Player {
protected:
int *myPayoffs;
int *otherPayoffs;
PlayerType playerType;// row or col player
Strategy myStrategy; // what strategy to play
unsigned roundID; // #id iteration
public:
friend bool GameSimulator::saveSession(string filename);
friend bool GameSimulator::loadSession(string filename);
virtual ~Player() = 0;
virtual Move getMove() = 0;
virtual string getStartegy() = 0;
Player();
};
#endif /* PLAYER_H_ */
问题是:
../Player.h:30:56: error: invalid use of incomplete type ‘struct GameSimulator’
../Player.h:20:7: error: forward declaration of ‘struct GameSimulator’
../Player.h:31:56: error: invalid use of incomplete type ‘struct GameSimulator’
../Player.h:20:7: error: forward declaration of ‘struct GameSimulator’
../Player.h: In member function ‘bool GameSimulator::saveSession(std::string)’:
../Player.h:28:11: error: ‘unsigned int Player::roundID’ is protected
../GameSimulator.cpp:43:54: error: within this context
../Player.h:24:7: error: ‘int* Player::myPayoffs’ is protected
../GameSimulator.cpp:44:34: error: within this context
../Player.h:28:11: error: ‘unsigned int Player::roundID’ is protected
../GameSimulator.cpp:51:54: error: within this context
../Player.h:25:7: error: ‘int* Player::otherPayoffs’ is protected
../GameSimulator.cpp:52:34: error: within this context
../Player.h:28:11: error: ‘unsigned int Player::roundID’ is protected
../GameSimulator.cpp:58:33: error: within this context
../Player.h:26:13: error: ‘PlayerType Player::playerType’ is protected
../GameSimulator.cpp:71:34: error: within this context
make: *** [GameSimulator.o] Error 1
答案 0 :(得分:1)
您的GameSimulator类定义是指向Player
的指针,但不需要完整类型。但是,您的Player
类定义确实需要完整类型的GameSimulator
。
从GameSimulator.h中删除#include "Player.h"
并取消注释Player.h中的#include "GameSimulator.h"
。然后,在GameSimulator.h中转发声明class Player;
。
请注意,每个类(.cpp文件)的实现都需要包含另一个的.h文件。