1

I am getting some strange errors when building the following lines of Code: (I'm including QVector and 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];
}

Someone any idea what I'm doing wrong ? Any Hint would help me :).

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'
4

1 回答 1

3

有人知道我在做什么错吗?

好几样东西!

首先,如果你打算使用 QThread,不要继承它,除非你真的打算改变 QThread 管理线程的方式。QThread 更像是一个线程控制器,而不是实际的线程本身。

您需要做的是创建您的类并从 QObject 派生,然后将其移至新的 QThread。您可以在此处阅读有关如何“真正使用 QThreads”的信息,并将示例代码用作模板。

您还创建了 NodeProcess 实例的 QVector。这会调用复制构造函数,但对象是从 QObject 派生的,其复制构造函数是私有的。这就是您收到此错误的原因:-

错误:'QObject::QObject(const QObject&)' 是私有的

您需要使用节点进程指针的 QVector:QVector< NodeProcess* > 并根据需要分配它们。

于 2014-06-03T16:29:17.330 回答