【问题标题】:How do I call a function in one class from another class? (C++)如何从另一个类调用一个类中的函数? (C++)
【发布时间】:2017-01-04 21:11:33
【问题描述】:

我将从一些背景开始。

制作一个简单的游戏。

我有两个类,一个叫 BouncingBall,另一个叫 ASCIIRenderer。 我有一个要遵循的说明列表,但有些说明并不完全清楚。

第一条指令是在 BouncingBall 中创建一个名为 m_pRenderer 的指针,并让它指向 ASCIIRenderer 中的成员变量。没有指定我必须指向哪个成员变量,并且其中的两个现有成员变量都是私有的,所以我自己制作并命名为 Renderer。

第二条指令(我需要帮助的那个)是当我为 BouncingBall 类编写一个函数以使用 m_pRenderer 调用 SetPixel 时,并以三个变量作为参数。

SetPixel 是 ASCIIRenderer 类中的公共函数的名称,指令指出我必须以某种方式使用指针来调用它。

总结:我需要使用指针从一个单独的类的函数中调用一个类的函数。

有人可以向我解释一下我将使用什么语法来完成此操作吗?

【问题讨论】:

  • m_pRenderer->setPixel(m_PositionX, m_PositionY, ball);
  • 当我输入那个时,我在 m_pRenderer 下得到一个错误,确切的错误信息是:表达式必须有指针类型。
  • 那么你没有按照第一条指令说你应该创建一个名为m_pRenderer的指针。
  • 不过就是这样,我确实有一个具有该名称的指针。
  • 好吧,我无法调试我看不到的代码。但很明显,你第一步做错了。

标签: c++ function class pointers


【解决方案1】:

根据您提供的详细信息,这是我收集到的。假设 BouncingBall 类将获得 X 和 Y 位置并调用函数 foo 设置渲染器的 X 和 Y 值。还有,不知道你会怎样 初始化指针,因为上面没有详细说明。希望这会有所帮助。

class BouncingBall
{
     public:
         void foo( int posX, int posY)
         {
             m_pRenderer->setPixel( posX, posY);
         }
     private:
        ASCIIRenderer* m_pRenderer;

};

【讨论】:

    【解决方案2】:

    我在下面包含的代码显示了一个类的示例,在本例中为 Ball,具有指向另一个类的指针,在本例中为 Renderer,注入并存储以供以后使用。

    然后Ball 类可以使用“箭头”语法pointer->MemberFunction(arg1, arg2); 调用Renderer 类上的公共函数

    #include <iostream>
    
    class Renderer
    {
    public:
        /* Constructor and other functions omitted */
        void SetPixel(const int x, const int y) const;
    };
    
    void Renderer::SetPixel(const int x, const int y) const
    {
        std::cout << "Set pixel: (" << x << ", " << y << ")" << std::endl;
    }
    
    class Ball
    {
    public:
        Ball(const Renderer *const renderer, const int posX, const int posY);
        void Render() const;
    private:
        const Renderer* _renderer;
        int _posX;
        int _posY;
    };
    
    Ball::Ball(const Renderer *const renderer, const int posX, const int posY)
        : _renderer(renderer), _posX(posX), _posY(posY)
    {}
    
    void Ball::Render() const
    {
        _renderer->SetPixel(_posX, _posY);
    }
    
    int main()
    {
        const Renderer renderer;
        const Ball ball(&renderer, 10, 20);
    
        ball.Render();
    
        return 0;
    }
    

    程序的输出为:Set pixel: (10, 20)

    【讨论】:

      猜你喜欢
      • 2016-01-09
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2017-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      相关资源
      最近更新 更多