Простой пример QThread не будет правильно ссылаться - PullRequest
0 голосов
/ 11 июня 2018

Я хочу использовать 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 голосов
/ 13 июня 2018

Проблема была решена путем изменения параметра «Поддержка RunTime для общего языка» с «Поддержка RunTime для общего языка / clr» на «Нет поддержки RunTime для общего языка» для файла moc_multiwatcher.cpp, который генерирует QT.Эти файлы находятся в разделе «Сгенерированные файлы» -> «Отладка» обозревателя решений. Доступ к настройке clr для этого файла можно получить, щелкнув правой кнопкой мыши и выбрав «Свойства».Я надеюсь, что это полезно для других людей, имеющих странные ошибки компоновки в своих проектах Visual Studio c ++ / clr / QT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...