【发布时间】:2015-12-24 22:37:41
【问题描述】:
我在 Windows7 平台上使用 Qt5.5.1。
我有以下代码可以使用 msvc2012 构建工具包编译(并运行):
void MyDialog::accept()
{
DataBase::instance()->logEventMessage(tr("Modified settings!"));
close();
}
logEventMessage 是:
int logEventMessage(QString & eventDescription);
当我切换到MinGW build kit时,编译器说:
没有匹配的函数调用DataBase::logEventMessage(QString)...
好吧,解决这个问题很容易(编译器期待有一个 QString&):
void MyDialog::accept()
{
QString text(tr("Modified settings!"));
DataBase::instance()->logEventMessage(text);
close();
}
然而,有两件事让我感到困惑:
1) 为什么初始代码可以使用 msvc2012 构建工具包编译(而不是使用 MinGW 编译)?
2) 哪个编译器是 C++ "正确" ?... ;)
【问题讨论】:
-
这可能是 MSVC 扩展,允许将临时对象绑定到非 const 左值引用
-
要修复它,将函数更改为
int logEventMessage(QString const & eventDescription);(它应该放在首位,因为您在记录时没有修改消息)
标签: c++ qt visual-studio-2012 compiler-errors mingw