【发布时间】:2019-07-12 17:35:13
【问题描述】:
我有两个课程,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_;
}
ability.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变量中?
【问题讨论】:
-
能否在这两种情况下添加错误消息?
标签: c++ friend pure-virtual