【问题标题】:overloaded ‘QString(int)’ is ambiguous重载的‘QString(int)’不明确
【发布时间】:2011-07-24 23:47:44
【问题描述】:

以下代码片段给出了编译错误 call of overloaded ‘QString(int)’ is ambiguous 与 qt 4.7.3 (系统是linux 64bit,debian不稳定)

struct QSAConnection
{
  QSAConnection() : sender(0), signal(0), function_ref() { }
  QSAConnection(QObject *send, const char *sig, QSObject ref)
    : sender(send), signal(QLatin1String(sig)), function_ref(ref) { }
  QObject *sender;
  QString signal;
  QSObject function_ref;
};

有什么建议吗?

【问题讨论】:

    标签: c++ qt4.7


    【解决方案1】:

    相关位是这一行:

    QSAConnection() : sender(0), signal(0), function_ref() { }
    

    由于signalQStringsignal(0) 位试图调用QString 类的构造函数,该构造函数将整数作为其唯一参数。根据 Qt 文档,QString 没有这样的构造函数。然而,它确实有一个构造函数采用char 和一个QChar,它具有从int 的隐式转换。我认为这两者之间是模棱两可的。

    你的意思是这个吗?

    QSAConnection() : sender(0), signal(), function_ref() { }
    

    默认初始化signal。请注意,从技术上讲,在这种情况下根本不需要将其包含在初始化列表中。

    【讨论】:

      【解决方案2】:

      这是一件好事。如果它没有歧义,您可能会在QString::QString(char const* src) 上遇到空指针异常。这是std::string 的常见错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多