重载'QString(int)'是不明确的

时间:2011-07-24 23:47:44

标签: c++ qt4.7

以下代码片段给出了编译错误 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;
};

任何提示?

2 个答案:

答案 0 :(得分:5)

相关位是这一行:

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

由于signalQStringsignal(0)位试图调用QString类上的构造函数,该构造函数将整数作为其唯一参数。根据Qt文档,QString没有这样的构造函数。但是,它有一个构造函数采用char,而QChar具有int的隐式转换。我希望这两者之间的含糊不清。

你的意思是这样吗?

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

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

答案 1 :(得分:0)

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