gpt4 book ai didi

c++ - qInstallMessageHandler 指向外部库方法的指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:19:51 25 4
gpt4 key购买 nike

** 我关注了:http://www.qt-coding.com/2013/08/06/tip-of-the-day-redirect-qdebug-to-a-file/

我创建了一个方法:

MyLogging(QtMsgType type, const QMessageLogContext &context, const QString &msg);

它位于我的主项目的外部库(我创建的)中。

当我执行以下操作时:

qInstallMessageHandler(MyLib::MyLogging);

编译器说它不能转换:

错误:C2664:“QtMessageHandler qInstallMessageHandler(QtMessageHandler)”:无法将参数 1 从“void (__cdecl MyLib::* )(QtMsgType,const QMessageLogContext &,const QString &)”转换为“QtMessageHandler” 没有上下文可以进行这种转换'

但如果我将 MyLogging 方法与 main.cpp 内联,一切正常。

我正在了解为什么会这样。任何有助于理解这一点的帮助都会很棒。

最佳答案

成员函数(方法)与常规函数有很大不同。他们需要知道他们调用了哪个对象(this 指针)。因此,要修复它,请将 MyLogging 设为全局函数或静态成员函数。

注意:C++11中也有mem_fn可以解决上述问题,但是qInstallMessageHandler需要一个函数指针,当mem_fn 创建包装器对象。也许这会在以后的 Qt 版本中改变。

关于c++ - qInstallMessageHandler 指向外部库方法的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27988772/

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