gpt4 book ai didi

c++ - 私有(private)/保护变量 "error: within this context"

转载 作者:行者123 更新时间:2023-11-28 03:17:38 32 4
gpt4 key购买 nike

我有一个基于 SFML gamefromscratch.com 教程的类,称为“VisibleGameObject” 在这个类中,是一个私有(private)变量“_sprite”,以及一个“getSprite()”函数,我尝试将其作为 protected 和民众。 (即使是公共(public)的,它仍然说“_sprite”是私有(private)的,即使公共(public)函数返回变量)。

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

VisibleGameObject _testtile1;
VisibleGameObject _cursorSprite;

但是当我绘制 Sprite 时,出现错误:within this context。

_mainWindow.draw(_cursorSprite._sprite);

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

_mainWindow.draw(_cursorSprite.getSprite());

但总是,“错误:‘sf::Sprite VisibleGameObject::_sprite’是私有(private)的。错误:在此上下文中”

对我来说没有任何意义,因为

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

2) getSprite() 是公开的,并返回私有(private)变量,但它仍然说 _sprite 是私有(private)的?这对我来说毫无意义!我所了解的关于 Getters 和 Setters 的一切都表明,公共(public)函数可以返回一个私有(private)变量,因为这就是这个 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();

最佳答案

类的 protected 成员只能由类本身和派生类访问。

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

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

关于c++ - 私有(private)/保护变量 "error: within this context",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16346919/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com