Question

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'
Was it helpful?

Solution

Someone any idea what I'm doing wrong ?

Quite a few things!

Firstly, if you're going to use QThread, don't inherit from it, unless you're actually planning on changing how QThread manages threading. QThread is more of a thread controller than the actual thread itself.

What you need to do is to create your class and derive from QObject, then move that to a new QThread. You can read about how to "Really Truly Use QThreads" here and use the example code as a template.

You're also creating a QVector of NodeProcess instances. This invokes the copy constructor, but the object is derived from QObject, whose copy constructor is private. That's why you get this error: -

error: 'QObject::QObject(const QObject&)' is private

You need to use a QVector of Node Process pointers: QVector< NodeProcess* > and allocate them as required.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top