Hox*_*bot 3 c++ friend pure-virtual
我有两节课,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_;
}
Run Code Online (Sandbox Code Playgroud)
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);
};
Run Code Online (Sandbox Code Playgroud)
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_;
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,为什么我无法访问top_speed_并将其放入float example变量中?
按照[class.friend]/10,友谊不是继承的.派生类不会自动成为类的朋友,因为它的父类是该类的朋友.
下面也不起作用的原因可能是因为Dash在定义函数之前没有ExecuteAbility定义.
friend bool Dash::ExecuteAbility(PlayerCharacter& in_player);
Run Code Online (Sandbox Code Playgroud)
但是,通过正确的定义顺序,它将起作用.见DEMO.
| 归档时间: |
|
| 查看次数: |
191 次 |
| 最近记录: |