【问题标题】:Set pointer in class在类中设置指针
【发布时间】:2021-08-10 15:39:21
【问题描述】:

我是 C++ 新手,我用 SFML 开始了一个项目。我需要一个可以处理精灵的类,所以我这样做了:

#pragma once

#include <SFML/Graphics.hpp>
#include <iostream>
class Particle
{
private:
    sf::Sprite **sprite;
public:
    Particle(sf::Sprite* sprite)
    {
        this->sprite=&sprite;
        
    };
    ~Particle();

    void setPosition(sf::Vector2f newPos)
    {
        **sprite.setPosition(newPos);
    }
};

我想用指针访问某个精灵,并将该精灵设置为类私有变量,但我遇到错误“表达式必须具有类类型但它的类型为“sf::Sprite **”。精灵变量需要被所有函数访问所以,我想在本地设置这个类。有没有更好的方法来做到这一点?

【问题讨论】:

  • 为什么要指向指针?这是没有意义的。特别是因为指针将无效(您使 this-&gt;sprite 指向 local 变量 sprite,一旦 Particle 构造函数结束,该变量将不复存在)。
  • (*sprite)-&gt;setPosition(newPos)。但说真的,去掉双指针,这里没有理由。
  • 另外sf::Sprite 是一个轻量级对象。甚至不需要使用 1 个指针。只需按值存储即可。
  • @HattedRooster 我需要在粒子类中本地使用精灵。如何在构造函数外使用精灵指针?

标签: c++ oop pointers function-pointers sfml


【解决方案1】:

错误是因为

**sprite.setPosition(newPos);

相同
**(sprite.setPosition(newPos));

也就是说,您尝试取消引用 sprite.setPosition(newPos) 返回的内容

要解决该错误(留下我在评论中已经提到的另一个问题),您需要取消引用指针变量本身:

(*sprite)->setPosition(newPos);

【讨论】:

  • sprite 是指向您自己提到的本地(死)变量的指针。我看不出不处理这一事实的答案会有什么用。
猜你喜欢
  • 2015-08-19
  • 1970-01-01
  • 2017-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-01
  • 1970-01-01
相关资源
最近更新 更多