gpt4 book ai didi

c++ - 这是什么意思 : warning: converting from ‘void (ClassName::*)()’ to ‘void (*)()’

转载 作者:搜寻专家 更新时间:2023-10-31 00:05:20 24 4
gpt4 key购买 nike

我在一个有回调的类中有一个成员函数,但回调不是严格必需的,所以它有一个默认回调,它是空的。它似乎工作正常,但我收到一个烦人的警告:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com