1

我有这个命名Enemy的类,它Ninja继承了它的属性。在Ninja的攻击函数中,我正在尝试调用NinjagetAttackPower函数,但是我该如何获取它。我试过打电话this.getAttackPower,但没有用。

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

class Enemy {
    int attackPower;
    public:
        virtual void attack() { cout << "I am attacking you!"; }
    protected:
        int getAttackPower() {
            return attackPower;
        }
        void setAttackPower( int a ) {
            attackPower = a;
        }
};

class Ninja : public Enemy {
    void attack() {
        cout << "(minus " << getAttackPower() << " points).";
        // .................. right here ......
    }
};

int main() {
    Ninja ninjaObj;

    ninjaObj.setAttackPower(23);

    ninjaObj.getAttackPower();

}

以下是我得到的错误:

void Enemy::setAttackPower(int) is protected
error: within this context
error: 'int Enemy::getAttackPower()' is protected
error: within this context
4

1 回答 1

3

你的问题main不在attack。您将访问修饰符设置为Enemy::setAttackPower(int)和。这意味着除非您在扩展 Enemy的类中,否则这些方法将被视为。Enemy::getAttackPower()protectedprivate

这意味着当您在main其中时无法访问ninjaObj.setAttackPower(23),因为main超出了任何 object 的范围

但是,如果您调用ninjaObj.attack(),它也会失败,因为您没有为 设置访问修饰符Ninja::attack(),因此它默认为 private

解决方法:public:在 前面添加Ninja::attack(),不要调用Enemy::setAttackPower(int)orEnemy::getAttackPower()在 中main

于 2012-07-16T16:20:41.367 回答