将类集枚举更改为非类集枚举
Changing Class-set Enum to Non Class-set Enum
本文关键字:枚举 更新时间:2023-10-16
我有错误:
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 */);
外部类中需要来自它的输入,但我希望保持我的引擎类为基础。我该怎么做?
非常感谢。
您应该使函数成为静态成员。您的类声明如下:
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
)会起作用。
相关文章:
- 不带大括号的枚举形式
- 枚举环境变量的惯用C++14/C++17方法
- 类似枚举的计算常量
- 如何正确实现和访问运算符的各种自定义枚举器
- 错误:从"int"到枚举c++的转换无效
- C++中构造函数中的枚举
- 访问在 C++ 结构中声明的枚举变量
- 枚举类'classname'的多重定义
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- typedef 枚举和枚举类有什么区别?
- 为什么我的开关/机箱在使用枚举时默认?
- 标准::可选枚举的比较运算符
- C++两个源文件之间共享的枚举的静态实例
- 打印没有铸件的枚举可以在C++中吗?
- 枚举成员与静态 int 成员?
- C++:枚举:错误:应使用标识符而不是"}"
- 带有 c++ 的枚举(输入检查)
- 在 qml 中使用 Q_ENUM 和 Q_PROPERTY 作为枚举类
- 为什么 int 类型的枚举类值不能用作 int
- 在 C++ 中输出枚举类类型的向量元素