我在一个有回调的类中有一个成员函数,但回调不是严格必需的,所以它有一个默认回调,它是空的。它似乎工作正常,但我收到一个烦人的警告:
warning: converting from ‘void (ClassName::*)()’ to ‘void (*)()’
我正在尝试弄清楚它的含义以及如何关闭它(或者如果我真的做错了就修复它)。这是一些简单的代码:
class ClassName{
public:
void doSomething(void (*callbackFunction)() = (void(*)()) &ClassName::doNothing){
callbackFunction();
}
void doNothing(){}
};
int main(){
ClassName x;
x.doSomething();
return 0;
}
注意:如果我这样做(没有明确地将其转换为 void(*)()
):
void doSomething(void (*callbackFunction)() = &ClassName::doNothing)
我明白了:
main.cpp:3: error: default argument for parameter of type ‘void (*)()’ has type ‘void (ClassName::*)()’
最佳答案
问题是您将指针传递给实例 方法而不是静态方法。如果您将 doNothing
设为静态方法(这意味着没有隐式实例参数),警告就会消失。
具体来说,
warning: converting from ‘void (ClassName::*)()’ to ‘void (*)()’
准确的说是从类ClassName的成员函数,转换为非成员函数。
另请参阅 C++ FAQ Lite entry about pointers to member functions and pointers to functions .
关于c++ - 这是什么意思 : warning: converting from ‘void (ClassName::*)()’ to ‘void (*)()’ ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2527951/