【问题标题】:C++ - access variables on static void functionsC++ - 访问静态 void 函数上的变量
【发布时间】:2015-07-14 11:41:43
【问题描述】:

这是我的回调函数(ALOG 用于调试)

static void playerEventCallbackA(void *clientData, SuperpoweredAdvancedAudioPlayerEvent event, void *value) {
    ALOG("###################### CALLBACK PLAYER A.... ");
    if (event == SuperpoweredAdvancedAudioPlayerEvent_LoadSuccess) {
        ALOG("###################### CALLBACK PLAYER A.... loaded"); 
        SuperpoweredAdvancedAudioPlayer *playerA = *((SuperpoweredAdvancedAudioPlayer **)clientData);        
        playerA->setBpm(126.0f);
        playerA->setFirstBeatMs(353);
        playerA->setPosition(playerA->firstBeatMs, false, false);
    };
}

我需要在这里设置 bpm,这是我在这个类的另一个函数上检测到的。我该如何管理?

【问题讨论】:

  • 听起来像是 XY 问题。通过在一个对对象不起作用的函数中访问每个对象的变量,您实际上想达到什么目的?
  • 我已经编辑了上面的问题;)
  • 没有the bpm,这就是重点。当bpm 是非静态数据成员时,该类的每个对象(实例)都有自己的bpm 值,并且没有“全局”值。另一方面,静态成员函数不与任何一个对象相关联——它基本上是一个全局函数。它可以访问任何对象上的bpm 值,但您必须知道要更改哪个对象的值。还是您希望 bpm 也是静态的(全局值)?

标签: c++ variables undeclared-identifier


【解决方案1】:

你不能,因为static function 没有this 参数。您只能访问静态成员,或将所需类型的对象发送到静态函数。

【讨论】:

    【解决方案2】:

    您必须将类的对象传递给函数并在函数内使用对象的数据成员,或者创建类的对象作为函数的局部变量并访问对象的数据成员.

    例如

    #include <iostream>
    
    class A
    {
    private:
        float a, b, c;
    public:
        A( float a, float b, float c ) : a( a ), b( b ), c( c )
        {
        }
    
        static void display_average( const A &a )
        {
            std::cout << ( a.a + a.b + a.c ) / 3 << std::endl;
        }
    };
    
    int main()
    {
       A a( 10.10f, 20.20f, 30.30f );
    
       A::display_average( a );
    } 
    

    【讨论】:

    • 这是一个预定义的回调函数..有解决方法吗?
    • @GeneralError 这是一个演示静态函数如何处理类对象的示例。
    • 谢谢你的例子。我仍然无法让它工作:/(我对 c++ 很陌生).. 我已经用函数编辑了上面的问题
    • @GeneralError 从您编辑的帖子中不清楚 playerA->setBpm(126.0f); 有什么问题?
    • 我已经在另一个函数中动态检测到该值.. 现在我想通过playerEventCallbackA() 中的setBpm() 设置它
    猜你喜欢
    • 2012-07-16
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多