У меня два класса, PlayerCharacter
и Ability
. Класс Ability
имеет чисто виртуальную функцию, которую я объявляю как friend
до PlayerCharacter
. Однако я, похоже, не могу получить доступ к закрытым членам в объявленной функции friend
. Это что-то, что я упускаю из виду?
Я попытался объявить дочернюю функцию, а не виртуальную, как функцию друга, но безрезультатно.
player_chracter.h :
#include "ability.h"
class PlayerCharacter : public Character {
private:
// Friend function
friend bool Ability::ExecuteAbility(PlayerCharacter& in_player);
// This doesn't work either
//friend bool Dash::ExecuteAbility(PlayerCharacter& in_player);
// Private variable
float top_speed_;
}
способность.h :
//Forward declaration
class PlayerCharacter;
class Ability {
public:
Ability();
~Ability();
virtual bool ExecuteAbility(PlayerCharacter& in_player) = 0;
};
//---------------------------------------------------------
class Dash : public Ability {
public:
Dash();
~Dash();
bool ExecuteAbility(PlayerCharacter& in_player);
};
ability.cpp :
#include "ability.h"
#include "player_character.h" //Follow through on forward declaraction
bool Dash::ExecuteAbility(PlayerCharacter& in_player) {
float example = in_player.top_speed_;
}
Почему в приведенном выше коде я не могу получить доступ к top_speed_
и поместить его в переменную float example
?