-
21-12-2019 - |
题
在构建以下代码时,我正在获得一些奇怪的错误: (我包括qvector和qthread)。
nodeprocess.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];
}
.
有人知道我做错了什么? 任何提示都会帮助我:)。
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'
. 解决方案
有人知道我做错了什么?
很少的东西!
首先,如果您要使用QThread,不要继承它,除非您实际上计划更改QThread如何管理线程。 QThread更像是线程控制器,而不是实际的线程。
您需要做的是创建类并从qobject派生,然后将其移动到新的qthread。您可以仔细阅读如何”真的真的使用qthreads“这里并使用示例代码作为模板。
您还创建了NodeProcess实例的QVector。这调用了复制构造函数,但对象源自Qobject,其复制构造函数是私有的。这就是你收到这个错误的原因: -
错误:'qobject :: qobject(const qobject&)'是私有的
您需要使用节点处理指针的qvector:qvector
不隶属于 StackOverflow