无法从派生 class 访问受保护成员

Unable to access protected member from derived class

我有一个与此类似的设置。来自包含受保护成员 x.

的单个基 class 的多级继承
class Sprite {
protected:
    float x, y;
}

class AnimatedSprite : Sprite {
public:
    void draw(float x, float y);
}

class Player : AnimatedSprite {
public:
    void draw(float x, float y);
}

派生 class Player 中 draw 方法的实现与此类似。

void Player::draw(float x, float y) {
    AnimatedSprite::draw(this->x, this->y);
}

但是编译器抱怨成员 x 和 y 不可访问,即使它们在基 class 中被列为受保护 class。

AnimatedSprite 使用私有继承,因此 Sprite 的成员成为 AnimatedSprite 的私有成员。您可能想要使用受保护的继承:

class AnimatedSprite : protected Sprite {
public:
    void draw(float x, float y);
}

class Player : protected AnimatedSprite {
public:
    void draw(float x, float y);
}

默认情况下 class 的推导是 private。如果要访问 protected 基本成员,则必须进行派生 public:

class AnimatedSprite : public Sprite

// ...

class Player : public Sprite

(您也可以进行推导 protected,但这将是一件相当奇特的事情。您同样可以进行第一个推导 publicprotected 并保留第二个 private,但这与 class 层次结构的预期意图不符。public 继承显然是您在这两种情况下所寻找的。)