我对c++还是个新手,有人告诉我#pragma曾经应该处理循环依赖
我的GameManager.h和GameSetting.h都需要相互了解,并且每个都有另一个的指针
对于我的游戏设置。h我有:
#pragma once
#include "PlayerManager.h"
#include <fstream>
#include "GameManager.h";
class GameSettings {
private:
PlayerManager* pM;
GameManager* gM;
vector<Player*> players;
bool inGame = false;
double betValue = 5;
bool allowSplit = true;
bool allowInsurance = true;
GameSettings(PlayerManager* pM, GameManager* gM) { this->pM = pM; this->gM = gM; }
struct GameSettingData {
vector<int> playersId;
double betValue;
bool allowSplit;
bool allowInsurance;
};
函数声明。。。
对于GameSettings.pp,我只有#include";GameSettings.h";
对于GameManager,我只有
#pragma once
#include "GameSettings.h"
class GameManager {
private:
bool isActive = false;
GameSettings *gS;
public:
bool getIsActive() { return isActive; }
bool startGame() { return true; }
};
当我在GameManager中删除任何提及GameSettings的内容时,所有内容都可以
我大部分都知道c#,所以这种循环依赖对我来说是一种新的东西。我确实尝试过其他类似的问题,但这对没有帮助
在GameMager.h中使用GameSettings
的前向声明。指针在解除围栏之前不需要完整的类定义。
#pragma once
class GameSettings;
class GameManager {
private:
bool isActive = false;
GameSettings *gS;
public:
bool getIsActive() { return isActive; }
bool startGame() { return true; }
};
GameManager
和PlayerManager
也可以参与GameSettings.h中的正向声明。
#pragma once
#include <fstream>
class PlayerManager;
class GameManager;
class GameSettings {
private:
PlayerManager* pM;
GameManager* gM;
vector<Player*> players;
bool inGame = false;
double betValue = 5;
bool allowSplit = true;
bool allowInsurance = true;
GameSettings(PlayerManager* pM, GameManager* gM) { this->pM = pM; this->gM = gM; }
struct GameSettingData {
vector<int> playersId;
double betValue;
bool allowSplit;
bool allowInsurance;
};
在.cpp文件中设置所需的#include
。