以下代码片段给出了编译错误
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;
};
任何提示?
答案 0 :(得分:5)
相关位是这一行:
QSAConnection() : sender(0), signal(0), function_ref() { }
由于signal
是QString
,signal(0)
位试图调用QString
类上的构造函数,该构造函数将整数作为其唯一参数。根据Qt文档,QString
没有这样的构造函数。但是,它有一个构造函数采用char
,而QChar
具有int
的隐式转换。我希望这两者之间的含糊不清。
你的意思是这样吗?
QSAConnection() : sender(0), signal(), function_ref() { }
默认情况下会初始化signal
。请注意,从技术上讲,在这种情况下根本不需要将它包含在初始化列表中。
答案 1 :(得分:0)
这是一件好事。如果它不明确,您可能会在QString::QString(char const* src)
上遇到空指针异常。这是std::string
的常见错误。