Seite 1 von 1

Konstrutor member als member übergeben

Verfasst: 8. August 2011 17:28
von DBGTMaster
Hallo,

folgende Code- Zeile führt zu einem segmentation-fault:

Code: Alles auswählen

TcpAbstractCommand::TcpAbstractCommand(QObject* parent) : QObject(parent), m_tcpSendStreamArray(), m_tcpSendStream(m_tcpSendStreamArray)
Grund ist die Anweisung "m_tcpSendStream(m_tcpSendStreamArray)"... Aber wie kann ich sonst dieses lösen??

Ich möchste einfach dem Konstuktor von m_tcpSendStream die Methode m_tcpSendStreamArray übergeben...

Eventuell einen Pointer verwenden?

Code: Alles auswählen

TcpAbstractCommand::TcpAbstractCommand(QObject* parent) : QObject(parent)
{
    QDataStream* m_tcpSendStream = new QDataStream(&m_tcpSendStreamArray);
}
Oder gibts ne andere ganz einfache Lösung, ohne einen Pointer verwenden zu müssen

lG

Re: Konstrutor member als member übergeben

Verfasst: 8. August 2011 17:37
von franzf
Es ist nicht die Reihenfolge in der Initialisierungsliste ausschlaggebend, so die in der Klassendefinition.
Wenn dort das Array hinter dem Stream steht, wird es IMMER später initialisiert.
Lösung: Member in der Klassendefinition in die richtige Reihenfolge bringen.
Im übrigen ist ", m_tcpSendStreamArray()," absolut unnötig. Member, die nicht in der Initialisierungsliste stehen, werden trotzdem initialisiert, dafür sorgt der Compiler. Leere Initialisierung (sprich: Default-Initialisierung) brauchst du nicht selber aufzurufen (ist auch etwas irritierend).

Re: Konstrutor member als member übergeben

Verfasst: 8. August 2011 17:43
von DBGTMaster
franzf hat geschrieben:Es ist nicht die Reihenfolge in der Initialisierungsliste ausschlaggebend, so die in der Klassendefinition.
Wenn dort das Array hinter dem Stream steht, wird es IMMER später initialisiert.
Lösung: Member in der Klassendefinition in die richtige Reihenfolge bringen.
Im übrigen ist ", m_tcpSendStreamArray()," absolut unnötig. Member, die nicht in der Initialisierungsliste stehen, werden trotzdem initialisiert, dafür sorgt der Compiler. Leere Initialisierung (sprich: Default-Initialisierung) brauchst du nicht selber aufzurufen (ist auch etwas irritierend).
Ok, alles klar...
m_tcpSendStreamArray() hab ich nur in die Liste geschrieben, mit der Hoffnung, dass diese Variable dann zuerst initialisiert wird, aber dann dreh ich mal die Reihenfolge in der Header- Datei um

danke!

Re: Konstrutor member als member übergeben

Verfasst: 9. August 2011 09:19
von DBGTMaster
// Edit:
Hat sich erledigt :)