我有一个基于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();
答案 0 :(得分:1)
类的受保护成员只能由类本身和从中派生的类访问。
由于您从一个派生自VisibleGameObject的类中调用draw函数,因此会出现错误。