Les threads QT font une erreur
-
21-12-2019 - |
Question
Je reçois des erreurs étranges lors de la construction des lignes de code suivantes: (J'inclus Qvector and QThread).
nœudprocess.h:
class NodeProcess : public QThread
{ public:
NodeProcess();
unsigned int create_NewProcess(int priority);
NodeProcess operator[](int relativeID); private:
int priority;
unsigned int ID;
unsigned int threadCount;
QVector<NodeProcess> mProcess;
};
NodeProcess.cpp:
NodeProcess::NodeProcess()
{
threadCount = 0;
}
unsigned int NodeProcess::create_NewProcess(int priority){
this->priority = priority;
threadCount++;
NodeProcess newProcess;
mProcess.append(newProcess);
return threadCount;
}
NodeProcess NodeProcess::operator[](int relativeID)
{
return mProcess[relativeID];
}
Quelqu'un aucune idée de ce que je fais mal? Toute astuce m'aiderait :).
In file included from ..\..\..\..\5.2.1\mingw48_32\include/QtCore/qalgorithms.h:45:0,
from ..\..\..\..\5.2.1\mingw48_32\include\QtCore/qvector.h:45,
from ..\..\..\..\5.2.1\mingw48_32\include\QtCore/QVector:1,
from ..\NodeProcessModelling\nodeprocess.h:4,
from ..\NodeProcessModelling\nodeprocess.cpp:1:
..\..\..\..\5.2.1\mingw48_32\include/QtCore/qobject.h: In copy constructor 'QThread::QThread(const QThread&)':
..\..\..\..\5.2.1\mingw48_32\include/QtCore/qobject.h:465:20: error: 'QObject::QObject(const QObject&)' is private
Q_DISABLE_COPY(QObject)
^
..\..\..\..\5.2.1\mingw48_32\include/QtCore/qglobal.h:978:5: note: in definition of macro 'Q_DISABLE_COPY'
Class(const Class &) Q_DECL_EQ_DELETE;\
^
In file included from ..\..\..\..\5.2.1\mingw48_32\include\QtCore/QThread:1:0,
from ..\NodeProcessModelling\nodeprocess.h:5,
from ..\NodeProcessModelling\nodeprocess.cpp:1:
..\..\..\..\5.2.1\mingw48_32\include\QtCore/qthread.h:57:21: error: within this context
class Q_CORE_EXPORT QThread : public QObject
^
In file included from ..\NodeProcessModelling\nodeprocess.cpp:1:0:
..\NodeProcessModelling\nodeprocess.h: In copy constructor 'NodeProcess::NodeProcess(const NodeProcess&)':
..\NodeProcessModelling\nodeprocess.h:7:7: note: synthesized method 'QThread::QThread(const QThread&)' first required here
class NodeProcess : public QThread
^
..\NodeProcessModelling\nodeprocess.cpp: In member function 'NodeProcess NodeProcess::operator[](int)':
..\NodeProcessModelling\nodeprocess.cpp:19:31: note: synthesized method 'NodeProcess::NodeProcess(const NodeProcess&)' first required here
return mProcess[relativeID];
^
In file included from ..\..\..\..\5.2.1\mingw48_32\include/QtCore/qalgorithms.h:45:0,
from ..\..\..\..\5.2.1\mingw48_32\include\QtCore/qvector.h:45,
from ..\..\..\..\5.2.1\mingw48_32\include\QtCore/QVector:1,
from ..\NodeProcessModelling\nodeprocess.h:4,
from ..\NodeProcessModelling\nodeprocess.cpp:1:
..\..\..\..\5.2.1\mingw48_32\include\QtCore/qthread.h: In instantiation of 'void QVector<T>::append(const T&) [with T = NodeProcess]':
..\NodeProcessModelling\nodeprocess.cpp:13:31: required from here
..\..\..\..\5.2.1\mingw48_32\include/QtCore/qglobal.h:979:12: error: 'QObject& QObject::operator=(const QObject&)' is private
Class &operator=(const Class &) Q_DECL_EQ_DELETE;
^
..\..\..\..\5.2.1\mingw48_32\include/QtCore/qobject.h:465:5: note: in expansion of macro 'Q_DISABLE_COPY'
Q_DISABLE_COPY(QObject)
^
In file included from ..\..\..\..\5.2.1\mingw48_32\include\QtCore/QThread:1:0,
from ..\NodeProcessModelling\nodeprocess.h:5,
from ..\NodeProcessModelling\nodeprocess.cpp:1:
..\..\..\..\5.2.1\mingw48_32\include\QtCore/qthread.h:57:21: error: within this context
class Q_CORE_EXPORT QThread : public QObject
^
In file included from ..\NodeProcessModelling\nodeprocess.cpp:1:0:
..\NodeProcessModelling\nodeprocess.h:7:7: note: synthesized method 'QThread& QThread::operator=(const QThread&)' first required here
class NodeProcess : public QThread
^
In file included from ..\..\..\..\5.2.1\mingw48_32\include\QtCore/QVector:1:0,
from ..\NodeProcessModelling\nodeprocess.h:4,
from ..\NodeProcessModelling\nodeprocess.cpp:1:
..\..\..\..\5.2.1\mingw48_32\include\QtCore/qvector.h:569:19: note: synthesized method 'NodeProcess& NodeProcess::operator=(const NodeProcess&)' first required here
*d->end() = copy;
^
Makefile.Debug:227: recipe for target 'debug/nodeprocess.o' failed
mingw32-make[1]: *** [debug/nodeprocess.o] Error 1
mingw32-make[1]: Leaving directory 'C:/Qt/Tools/QtCreator/bin/build-NodeProcessModelling-Desktop_Qt_5_2_1_MinGW_32bit-Debug'
makefile:34: recipe for target 'debug' failed
mingw32-make: *** [debug] Error 2
18:03:35: The process "C:\Qt\Tools\mingw48_32\bin\mingw32-make.exe" exited with code 2.
Error while building/deploying project NodeProcessModelling (kit: Desktop Qt 5.2.1 MinGW 32bit)
When executing step 'Make'
La solution
Quelqu'un aucune idée de ce que je fais mal?
Pas mal de choses!
Premièrement, si vous allez utiliser QThread, n'héritez pas de cela, à moins que vous ne planifiez en réalité de modifier la manière dont QThread gère la filetage. QThread est plus d'un contrôleur de fil que le fil réel lui-même.
Ce que vous devez faire est de créer votre classe et de dériver de QObject, puis de vous déplacer sur une nouvelle QThread. Vous pouvez lire sur comment
Vous créez également un qvecteur d'instances de crocrocrocession. Cela invoque le constructeur de copie, mais l'objet est dérivé de QObject, dont le constructeur de copie est privé. C'est pourquoi vous obtenez cette erreur: -
Erreur: 'QObject :: QOBJECT (Const QObject &)' est privé
Vous devez utiliser un QVecteur de pointeurs de processus de nœud: QVector