1

我正在尝试使用 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 分配相同)。

如何消除这些链接错误?

4

4 回答 4

2

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

于 2013-06-04T10:58:55.823 回答
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 目录添加到链接路径。

于 2013-06-04T10:15:07.623 回答
0

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

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

于 2016-11-28T04:16:41.763 回答
0

Microsoft Visual Studio 2015去:

(Project properties)->General->Platform Toolset

并将其设置为visual studio 2013 (v120)

这对我有用:)

于 2015-09-10T09:13:53.220 回答