私有/受保护变量“错误:在此上下文中”

时间:2013-05-02 20:14:17

标签: c++ function inheritance private public

我有一个基于SFML gamefromscratch.com教程的类,名为“VisibleGameObject”,在这个类中,是一个私有变量“_sprite”,以及一个“getSprite()”函数,我试过这个函数同时受保护和上市。 (即使是公开的,它仍然说“_sprite”是私有的,即使公共函数返回变量)。

在我的OnRender类中,我创建了两个VisibleGameObjects。

VisibleGameObject _testtile1;
VisibleGameObject _cursorSprite;

但是当我画画来绘制精灵时,我得到错误:在这种情况下。

_mainWindow.draw(_cursorSprite._sprite);

或者我尝试过(getSprite()受保护或公开)。

_mainWindow.draw(_cursorSprite.getSprite());

但总是,“错误:'sf :: Sprite VisibleGameObject :: _ sprite'是私有的。错误:在此上下文中”

对我没有任何意义,因为

1)_sprite是VisibleGameObject的变量。它可能是私有的,但除了它自己的原始类“VisibleGameObject”之外,它不会被任何东西访问。我认为类可以访问自己的变量,即使它们是另一个类中的新实例化对象?

2)getSprite()是公共的,并返回私有变量,但它仍然是说_sprite是私有的吗?这对我没有意义!我所学到的关于Getters和Setter的一切,都说公共函数CAN返回一个私有变量,因为这是Getter的全部内容。

sf::Sprite& VisibleGameObject::getSprite()
{
return _sprite;
}




class VisibleGameObject
{
public:
VisibleGameObject();
virtual ~VisibleGameObject();

 private:
sf::Sprite  _sprite;



protected:
sf::Sprite& getSprite();

OR

public:
sf::Sprite& getSprite();

1 个答案:

答案 0 :(得分:1)

类的受保护成员只能由类本身和从中派生的类访问。

由于您从一个派生自VisibleGameObject的类中调用draw函数,因此会出现错误。

你应该读到这个: http://www.cplusplus.com/doc/tutorial/inheritance/