我在Windows7平台上使用Qt5.5.1 我有以下代码使用msvc2012构建工具包编译(并运行):
void MyDialog::accept()
{
DataBase::instance()->logEventMessage(tr("Modified settings!"));
close();
}
其中 logEventMessage 是:
int logEventMessage(QString & eventDescription);
当我切换到MinGW构建工具包时,编译器说:
没有匹配函数来调用DataBase :: logEventMessage(QString)......
好吧,修复问题很简单(编译器期待QString&那里):
void MyDialog::accept()
{
QString text(tr("Modified settings!"));
DataBase::instance()->logEventMessage(text);
close();
}
然而,有两件事情仍困扰着我:
1)为什么初始代码使用msvc2012构建工具包编译好(虽然它没有用MinGW编译)?
2)哪个编译器是C ++“正确”?...;)
答案 0 :(得分:4)
您的功能需要QString&
。这是输入和输出参数。您使用临时构造它,从而丢弃它所做的任何更改。设计明智这是可疑的。
可能你想要const&
。
在C ++标准下,您不能将临时绑定到对非const的引用。
MSVC具有不符合要求的扩展名,可防止发生此错误。
使用正确的编译器标志的MSVC 2015表现正常。