Qt移动构造函数链接错误

时间:2013-06-04 09:54:24

标签: c++ visual-studio qt c++11 linker

我正在尝试使用Qt 4.8.4在Visual Studio 2010中编译项目。

当我构建它时,我会获得如下链接器错误:

error LNK2001: external symbol "__declspec(dllimport) public: class QByteArray & __thiscall QByteArray::operator=(class QByteArray &&)" (__imp_??4QByteArray@@QAEAAV0@$$QAV0@@Z) not resolved
error LNK2001: external symbol "__declspec(dllimport) public: class QString & __thiscall QSTring::operator=(class QString &&)" (__imp_??QString@@QAEAAV0@$$QAV0@@Z) not resolved

你可以在链接器中看到移动构造函数,但我没有使用任何C ++ 11特性。

链接器错误出现在我编码的文件中:

QByteArray xTmpArray;
QString    xString;
...
xTmpArray = xString.toAscii();

如果我对赋值行进行注释,则链接错误消失(对于QString赋值也是如此)。

如何消除这些链接错误?

3 个答案:

答案 0 :(得分:2)

我已经解决了。它(自然)是一个链接问题,因为它们给了我用Visual Studio 2008编译的库,它不支持移动构造函数。我使用了正确的版本,用VS2010编译,一切正常。

答案 1 :(得分:1)

我写了这段代码:

#include <QString>
#include <QByteArray>

int main() {
    QString s("a");
    QByteArray ba = s.toAscii();
    return 0;
}

我正在用命令编译它:

g++ -I /usr/include/qt4/QtCore/ -I/usr/include/qt4/ qtuse.cpp -lQtCore -o qtuse

我没有问题。您似乎忘记将程序与QtCore链接。

检查您的项目设置。您应该将Qt的lib目录添加到链接路径。

答案 2 :(得分:0)

当MSVC与预构建的Qt二进制文件之间存在版本不匹配时,会发生此错误。不要那样做。

如果您使用的是MSVC2015,则需要链接预构建的MSVC2015 Qt库。