Rei*_*ica 2 c++ g++ compiler-warnings
我在一个具有回调的类中有一个成员函数,但回调并不是严格必要的,所以它有一个默认的回调,它是空的.它似乎工作正常,但我得到一个恼人的警告:
warning: converting from ‘void (ClassName::*)()’ to ‘void (*)()’
Run Code Online (Sandbox Code Playgroud)
我试图找出它意味着什么以及如何将其关闭(或者如果我真的做错了就修复它).这是一些简单的代码:
class ClassName{
public:
void doSomething(void (*callbackFunction)() = (void(*)()) &ClassName::doNothing){
callbackFunction();
}
void doNothing(){}
};
int main(){
ClassName x;
x.doSomething();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
注意:如果我这样做(没有明确地将其作为a void(*)()):
void doSomething(void (*callbackFunction)() = &ClassName::doNothing)
Run Code Online (Sandbox Code Playgroud)
我明白了:
main.cpp:3: error: default argument for parameter of type ‘void (*)()’ has type ‘void (ClassName::*)()’
Run Code Online (Sandbox Code Playgroud)
问题是您正在传递指向实例方法的指针而不是静态方法.如果你创建doNothing一个静态方法(这意味着没有隐式实例参数),警告就会消失.
特别,
Run Code Online (Sandbox Code Playgroud)warning: converting from ‘void (ClassName::*)()’ to ‘void (*)()’
确切地说,它是从类ClassName的成员函数转换为非成员函数.
另请参阅有关成员函数指针和函数指针的C++ FAQ Lite 条目.
| 归档时间: |
|
| 查看次数: |
614 次 |
| 最近记录: |