Qt5:这段代码用msvc2012编译好,但是用MinGW编译错误...为什么?

时间:2015-12-24 22:37:41

标签: c++ qt visual-studio-2012 compiler-errors mingw

我在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 ++“正确”?...;)

1 个答案:

答案 0 :(得分:4)

您的功能需要QString&。这是输入和输出参数。您使用临时构造它,从而丢弃它所做的任何更改。设计明智这是可疑的。

可能你想要const&

在C ++标准下,您不能将临时绑定到对非const的引用。

MSVC具有不符合要求的扩展名,可防止发生此错误。

使用正确的编译器标志的MSVC 2015表现正常。