Я знаю, что есть много похожих именованных вопросов, но я не могу понять свою проблему после прочтения их числа.
Я пишу игру для проекта класса.
В class Dungeon
, function monsterTurn()
необходим доступ к setCurrSp()
, который объявлен как защищенный в class Hero
. Поэтому я попытался добавить monsterTurn()
в качестве функции друга к Hero
. Поскольку у меня было #include "Hero.hpp"
в class Dungeon
, я использовал прямое объявление, но оно выдает ошибку Incomplete type 'Dungeon' named in nested name specifier
.
Я знаю, что объявление setCurrSp()
как publi c решит все эти проблемы, но я не хочется расставаться с сеттером c. Похоже, что бэкдор открыт для неожиданных изменений. Поправьте меня, если я ошибся в этом.
Ниже приведены часть кодов.
Hero.hpp
#include <stdio.h>
#include <iostream>
#include <sstream>
#include <vector>
#include "Entity.hpp"
class Dungeon;
class Hero : public Entity{
protected:
void setCurrSp(int currSp) { this->currSp = currSp;}
public:
friend void Dungeon::monstersTurn(vector<Hero>::iterator hero, vector<Hero> heros);
}
Dungeon.hpp
#include <stdio.h>
#include <vector>
#include "Hero.hpp"
#include "Monster.hpp"
class Dungeon{
public:
void monstersTurn(vector<Hero>::iterator hero, vector<Hero> heroes);
}
Любая помощь будет оценена.