Konstrutor member als member übergeben

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

Konstrutor member als member übergeben

Beitrag 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
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Konstrutor member als member übergeben

Beitrag 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).
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

Re: Konstrutor member als member übergeben

Beitrag 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!
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

Re: Konstrutor member als member übergeben

Beitrag von DBGTMaster »

// Edit:
Hat sich erledigt :)
Antworten