简单的QThread示例无法正确链接

时间:2018-06-11 10:17:05

标签: qt visual-c++ clr linker-errors qthread

我想在我的班级中使用QThreadSynchronizer,就像这样

#ifndef _MULTIWATCHER
#define _MULTIWATCHER

#include <QThread>
#include <QFutureSynchronizer>

#include "globals.h"

class MultiWatcher : public QThread
{
    Q_OBJECT

public:

signals:
    void allDone();

public:
    void run() override;
    QFutureSynchronizer<FocusResult> _sync;
};

#endif

然而,当我尝试构建它时,我得到以下链接错误

1>C:\Qt\5.7\msvc2015_64\include\QtCore/qvector.h(134): error C2182: 'at': 
illegal use of type 'void'
1>C:\Qt\5.7\msvc2015_64\include\QtCore/qvector.h(135): error C2182: '[]': 
illegal use of type 'void'
1>C:\Qt\5.7\msvc2015_64\include\QtCore/qvector.h(136): error C2182: '[]': 
illegal use of type 'void'

etc ...

实际上,如果我注释掉整个类(如果QThreadSynchronizer被QFuture替换,它也是相同的),我会得到相同的错误,并且只是尝试包含两个包含文件,就像QThread和QFuture / QThreadSynchronizer彼此不兼容一样。所以以下也没有链接!

#ifndef _MULTIWATCHER
#define _MULTIWATCHER

#include <QThread>
#include <QFuture>

#endif

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

通过将“公共语言运行时支持”选项从“公共语言运行时支持/ clr”更改为“无公共语言运行时支持”,为QT生成的moc_multiwatcher.cpp文件解决了该问题。这些文件位于解决方案浏览器的“生成文件” - >“调试”部分,可以通过右键单击该文件并转到属性来访问该文件的clr设置。我希望这对其他在c ++ / clr / QT视觉工作室项目中出现奇怪链接错误的人有用。