T
Tigera
This doesn't seem to make any sense to me.
I have three classes, the declarations of which are shown below:
class Action
{
public:
virtual void Act (int range, int elevation, Combatant* actor ) = 0;
virtual void React (Action* incoming, Combatant* actor ) = 0;
virtual string Name ( ) const = 0;
virtual bool CanAct (int range, int elevation, Combatant* actor ) =
0;
virtual void Act (int range, int elevation, Combatant* actor,
Target& target ) = 0;
virtual bool CanAct (int range, int elevation, Combatant* actor,
Target& target ) = 0;
virtual ~Action() = 0;
};
class AttackAction : public Action
{
protected:
virtual void CalculateSpecials (Score* attack, Score* defense ) =
0;
virtual void CalculateDamage (Score* attack, Score* defense ) = 0;
virtual void DoDamage (int attacker, int defender ) = 0;
virtual ~AttackAction() = 0;
};
class SpecialAttack : public AttackAction
{
public:
virtual void Act (int range, int elevation, Combatant* actor );
virtual void React (Action* incoming, Combatant* actor );
virtual string Name ( ) const;
virtual bool CanAct (int range, int elevation, Combatant* actor );
virtual void Act (int range, int elevation, Combatant* actor,
Target& target );
virtual bool CanAct (int range, int elevation, Combatant* actor,
Target& target );
virtual ~SpecialAttack();
protected:
AttackAction* m_decorated;
virtual void CalculateSpecials (Score* attack, Score* defense );
virtual void CalculateDamage (Score* attack, Score* defense );
virtual void DoDamage (int attacker, int defender );
};
Now, inside any of the protected methods of SpecialAttack, if I try
this:
m_decorated->CalculateSpecials(attack, defense);
The compiler spits back the error:
error: 'virtual void
Battle::AttackAction::CalculateDamage(Battle::Score*, Battle::Score*)'
is protected
specialattack.cpp:20: error: within this context
Is this something that I've done wrong, or is it a bug within the
compiler? It seems intuitively obvious to me that if any of those
methods are protected, I should be able to use them within a derived
class.
Thanks for your help.
I have three classes, the declarations of which are shown below:
class Action
{
public:
virtual void Act (int range, int elevation, Combatant* actor ) = 0;
virtual void React (Action* incoming, Combatant* actor ) = 0;
virtual string Name ( ) const = 0;
virtual bool CanAct (int range, int elevation, Combatant* actor ) =
0;
virtual void Act (int range, int elevation, Combatant* actor,
Target& target ) = 0;
virtual bool CanAct (int range, int elevation, Combatant* actor,
Target& target ) = 0;
virtual ~Action() = 0;
};
class AttackAction : public Action
{
protected:
virtual void CalculateSpecials (Score* attack, Score* defense ) =
0;
virtual void CalculateDamage (Score* attack, Score* defense ) = 0;
virtual void DoDamage (int attacker, int defender ) = 0;
virtual ~AttackAction() = 0;
};
class SpecialAttack : public AttackAction
{
public:
virtual void Act (int range, int elevation, Combatant* actor );
virtual void React (Action* incoming, Combatant* actor );
virtual string Name ( ) const;
virtual bool CanAct (int range, int elevation, Combatant* actor );
virtual void Act (int range, int elevation, Combatant* actor,
Target& target );
virtual bool CanAct (int range, int elevation, Combatant* actor,
Target& target );
virtual ~SpecialAttack();
protected:
AttackAction* m_decorated;
virtual void CalculateSpecials (Score* attack, Score* defense );
virtual void CalculateDamage (Score* attack, Score* defense );
virtual void DoDamage (int attacker, int defender );
};
Now, inside any of the protected methods of SpecialAttack, if I try
this:
m_decorated->CalculateSpecials(attack, defense);
The compiler spits back the error:
error: 'virtual void
Battle::AttackAction::CalculateDamage(Battle::Score*, Battle::Score*)'
is protected
specialattack.cpp:20: error: within this context
Is this something that I've done wrong, or is it a bug within the
compiler? It seems intuitively obvious to me that if any of those
methods are protected, I should be able to use them within a derived
class.
Thanks for your help.