我有两节课,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 …Run Code Online (Sandbox Code Playgroud) 我有继承这个问题,我无法解决这个问题.我有三个班,他们之间有父母关系.它们都具有calcForces()函数.
class Object {
public:
virtual void calcForces();
};
class Boat : public Object {
public:
virtual void calcForces();
};
class Sailboat : public Boat {
public:
void calcForces(Wind wind);
};
Run Code Online (Sandbox Code Playgroud)
现在我的问题是II有一个创建为Sailboat的对象(并将其保存在Object-pointer中),但是当我调用calcForces()时,我最终在Boat :: calcForces()中,而不是Sailboat :: calcForces().我究竟做错了什么?
这是我对函数的调用:
(*this->object_ptr_arr[i]).calcForces(); //'object_ptr_arr' is of type 'Object**'
Run Code Online (Sandbox Code Playgroud)