c++ - 代码在 VS 2008 中运行良好,但在更高版本的 VS 中运行不正常

标签 c++ qt

以下代码在 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/

相关文章:

c++ - 使用定时器队列的调度器

c++ - 重新分配前的内存释放

qt - 当鼠标光标悬停在选项卡上时让 QTabWidget 切换到相应页面

qtWebengineProcess 无法启动

c++ - Boost Asio 示例 - 奇怪的 C++ 语法

c++ - 是否有一种 STL 方法可以对指针 vector 进行深度复制?

android - libgnuSTL_shared.so 从哪里来?为什么我构建后它的大小不同?

android - 无法创建新的 AVD。没有足够新的 Android SDK 可用

qt - 如何以编程方式在 QTableView 的列上设置文本对齐方式?

qt - QML是否支持根据timezoneID转换为不同的时区?