【发布时间】:2023-03-17 00:23:02
【问题描述】:
我想在我的课堂上使用 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
有什么想法吗?
【问题讨论】:
-
什么是
globals.h? -
如果我无意中尝试使用
QVector<void> ...之类的东西,这些错误(有点)是我所期望的。请编辑您的问题以显示导致错误的实际代码(不仅仅是标题)。 -
一如既往:尝试生成一个最小的可编译示例。大多数时候这个过程已经解决了你的问题...... :-)
-
附带说明,如果您在 C/C++->General 或类似的情况下为您的项目启用 CLR 支持,有时您可能会收到这些奇怪的消息(我无法记住与 2015 年)。但如果是这样,你可能只编译一个 helloword 程序就有麻烦了……
-
注意:对某个文件的更改消除了问题这一事实并不一定意味着该文件是问题的根源。
标签: qt visual-c++ clr linker-errors qthread