4

以下代码片段给出了 call of overloaded ‘QString(int)’ is ambiguousqt 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;
};

有小费吗?

4

2 回答 2

5

相关位是这一行:

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

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

你的意思是这个吗?

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

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

于 2011-07-25T01:25:28.390 回答
0

这是一件好事。如果它不是模棱两可的,您可能会在QString::QString(char const* src). 这是一个常见的错误std::string

于 2011-07-25T08:08:03.053 回答