c++ - 将 C 变量传递给 C++ 函数

标签 c++ c

我有一个使用 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/

相关文章:

c++ - 如何检查套接字是否已连接

c++ - 使用 emscripten 将位图缓冲区渲染到 HTML5 Canvas 中

c++ - VS2012 中 d3d11shader.h 中的奇怪错误 C2146 和 C4430

c++ - C++中模板类的继承

c++ - Qt 5.3 全屏问题

c - Gtkuimanager 弹出子菜单

c - 为什么 XOpenDisplay() 不会因错误的显示名称而失败

c - 如何使用c显示图像?

c - Emacs 执行两次 `c-mode-hook`

c++ - Qt5.5脚本