我有错误:
error: cannot convert 'AudioEngine::input' from type 'mad_flow (AudioEngine::)(void*, mad_stream*)' to type 'mad_flow (*)(void*, mad_stream*)'
我有枚举,
enum mad_flow AudioEngine::input(void *data, mad_stream *stream)
{
etc...
}
外部库正在调用它,
mad_decoder_init(&decoder, &player,
input, decode_header, decode_filter, process_output,
decode_error, 0 /* message */);
外部类需要输入,但我想保持我的引擎类。我怎么能这样做?
非常感谢。
答案 0 :(得分:0)
您应该将您的功能设为静态成员。您的类声明如下所示:
class AudioEngine
{
...
enum mad_flow input(void *data, mad_stream *stream);
...
};
你应该这样做:
class AudioEngine
{
...
static enum mad_flow input(void *data, mad_stream *stream);
...
};
mad_decoder_init(...
&AudioEngine::input,
...);
实际上,为了使C ++函数可以从C调用,应该在类之外声明它,并在其前面添加extern "C"
:
class AudioEngine
{
...
static enum mad_flow input(void *data, mad_stream *stream);
...
};
extern "C" enum mad_flow AudioEngine_input_callback(void *data, mad_stream *stream)
{
return AudioEngine::input(data, stream);
}
mad_decoder_init(...
AudioEngine_input_callback,
...);
但是,实际上,第一个解决方案(只是将static
添加到成员函数的声明中)将起作用。