代码在VS 2008中运行良好,但在更高版本的VS中则不行

Code works fine in VS 2008 but not in later versions of VS

本文关键字:VS 版本 运行 2008 代码 高版本      更新时间:2023-10-16

以下代码在VS 2008中工作正常,但在更高版本中会给出错误(C2440:"初始化":无法从"重载函数"转换为"TQStringArgFnPtr"作用域中具有此名称的函数都与目标类型不匹配)

我完全不明白为什么。有人可以帮我 vs2008 和后来的 v 之间有什么区别吗?

#include <QtCore>
typedef QString (QString::*TQStringArgFnPtr)(const QString &, int, const QChar &) const ;
TQStringArgFnPtr QStringArgFnPtr =  &QString::arg;

在这种情况下,赋值应该足以消除所选函数重载的歧义。这是我第一次想到编译器错误(第二个是VS)的原因之一。

但是,仔细阅读文档会发现,Qstring::arg的这种特定重载已更改签名,从:

QString QString::arg(
    const QString & a,
    int fieldWidth = 0,
    const QChar & fillChar = QLatin1Char( ' ' )
) const

。在Qt 4.8中,至:

QString QString::arg(
    const QString & a,
    int fieldWidth = 0,
    QChar fillChar = QLatin1Char( ' ' ) // no more reference !
) const

。在 Qt 5.4 中。第一个重载不再存在。

这让我得出结论,您的不同VS版本指向在这方面不兼容的不同Qt版本。