Domanda

Sto ottenendo alcuni strani errori durante la creazione delle seguenti righe di codice: (Sono incluso QVector e 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];
}
.

Qualcuno ha idea di cosa sto facendo male? Qualsiasi suggerimento mi aiuterebbe :).

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

È stato utile?

Soluzione

.

Qualcuno ha idea di cosa sto facendo male?

Abbastanza alcune cose!

Prima di tutto, se hai intenzione di usare qthread, non erediti da ereditare, a meno che tu non stia effettivamente pianificando di cambiare come qthread gestisce il threading. Qthread è più di un controller del filo rispetto al filetto effettivo stesso.

Cosa devi fare è creare la tua classe e derivare da Qobject, quindi spostalo a un nuovo qthread. Puoi leggere su come " Utilizzare davvero veramente qthreads "qui e usa il codice di esempio come modello.

Stai anche creando un qvector di istanze di nodeprocess. Ciò invoca il costruttore di copia, ma l'oggetto deriva da Qobject, il cui costruttore di copia è privato. Ecco perché ottieni questo errore: -

.

Errore: 'qobject :: qobject (Const Qobject &)' è privato

È necessario utilizzare un QVector dei Puntatori di processo del nodo: QVector e assegnarli come richiesto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top