0

我有一个基于 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 是私有的?这对我来说毫无意义!我所学到的关于 Getter 和 Setter 的所有内容都表明,公共函数可以返回一个私有变量,因为这就是这个 Getter 的全部意义所在。

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




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

 private:
sf::Sprite  _sprite;



protected:
sf::Sprite& getSprite();

或者

public:
sf::Sprite& getSprite();
4

1 回答 1

2

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

由于您不是从派生自 VisibleGameObject 的类中调用绘图函数,因此您会收到错误。

您可能应该阅读以下内容: http ://www.cplusplus.com/doc/tutorial/inheritance/

于 2013-05-03T14:57:20.053 回答