我有一个使用 OpenSL ES 的 android 项目,需要做一些清理工作。
我想做的一件事是将一些逻辑从一个文件中分离出来。
该文件定义了以下变量:
static SLObjectItf engineObject = NULL;
这是一个 C 变量,我们可以这样访问它:
(*engineObject)->Realize(engineObject, SL_BOOLEAN_FALSE);
我正在尝试将它传递给另一个 C++ 类:
audioBuffer->Create(&engineObject);
这是您通常将指针传递给 SLObjectItf
的方式,但它是一个 C 变量,因此这里有一些不同的行为。
这似乎是一个相当简单的任务,这里是接收函数:
AudioBuffer::Create(SLObjectItf* engineEngine)
{
// ....
(*engineEngine)->CreateAudioPlayer(engineEngine, &bqPlayerObject, &audioSrc, &audioSnk,
3, ids, req);
}
错误是:
request for member 'CreateAudioPlayer' in '* * engineEngine', which is of pointer type 'const SLEngineItf_* const' (maybe you meant to use '->' ?)
如何将 C 变量传递给 C++ 函数并在那里使用它?
最佳答案
查看头文件时,我看到 SLObjectItf
定义为
typedef const struct SLObjectItf_ * const * SLObjectItf;
这意味着它是一个指向结构的指针。当您将指针传递给 SLObjectItf
变量时,您将指针传递给指向结构的指针,因此 *engineEngine
是指向结构的指针。您需要另一个取消引用运算符,或者干脆不将其作为指针传递。
关于c++ - 将 C 变量传递给 C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23466730/