以下代码在 VS 2008 中运行良好,但在更高版本中会出现错误 (C2440: 'initializing' : cannot convert from 'overloaded-function' to '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 版本。
关于c++ - 代码在 VS 2008 中运行良好,但在更高版本的 VS 中运行不正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30797635/