【问题标题】:Simple QThread example won't link properly简单的 QThread 示例无法正确链接
【发布时间】: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&lt;void&gt; ... 之类的东西,这些错误(有点)是我所期望的。请编辑您的问题以显示导致错误的实际代码(不仅仅是标题)。
  • 一如既往:尝试生成一个最小的可编译示例。大多数时候这个过程已经解决了你的问题...... :-)
  • 附带说明,如果您在 C/C++->General 或类似的情况下为您的项目启用 CLR 支持,有时您可能会收到这些奇怪的消息(我无法记住与 2015 年)。但如果是这样,你可能只编译一个 helloword 程序就有麻烦了……
  • 注意:对某个文件的更改消除了问题这一事实并不一定意味着该文件是问题的根源。

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


【解决方案1】:

通过将 QT 生成的 moc_multiwatcher.cpp 文件的“Common Language RunTime Support”选项从“Common Language RunTime Support /clr”更改为“No Common Language RunTime Support”解决了这个问题。这些文件位于解决方案浏览器的“生成的文件”->“调试”部分中,可以通过右键单击该文件并转到属性来访问该文件的 clr 设置。我希望这对在他们的 c++/clr/QT Visual Studio 项目中遇到奇怪链接错误的其他人有用。

【讨论】:

    猜你喜欢
    • 2013-05-28
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多