(gelöst) Qt 4.5 Operatoren >> QDataStream in eigener Klasse verwenden



  • Hallo Zusammen,

    irgendwie scheine ich mit den Operatoren >> auf dem Kriegsfluss zu stehen.

    1. In dieser Klasse musste ich die Operatoren so deklarieren:

    QDataStream& operator<<(QDataStream &, ProcessData &);
    QDataStream& operator>>(QDataStream &, ProcessData &);
    

    Da ich in einer public Methode Schreibzugriff auf eine Eigenschaft habe:

    siehe hier ein Beispiel:

    ProcessEvent		ProcessData::getFirstEvent( void ) 
    {
    	ActEventNumber=0;
    	return		Events[ ActEventNumber ];
    }
    
    ProcessEvent		ProcessData::getNextEvent( void ) 
    {
    	if( ActEventNumber < Events.size() )
    		ActEventNumber++;
    
    	return		Events[ ActEventNumber ];
    }
    

    Das ist bis jetzt noch nicht mein Problem (denke ich jedenfalls).

    Wenn ich dann aber in der Klasse zwei Methoden schreibe zum
    sicheren und Einlesen der Daten,
    hier zum Schreiben der Daten:

    void	ProcessData::writeProcessData( void )
    {
    QFile file(FileName);
    file.open(QIODevice::WriteOnly);
    QDataStream		out(&file);
    out.setVersion(QDataStream::Qt_4_5);
    out  << this;
    file.close();
    }
    

    und hier zum Lesen der Daten:

    void ProcessData::readProcessData( void )
    {
    QFile	file(FileName);
    file.open(QIODevice::ReadOnly);
    QDataStream in(&file);
    in.setVersion(QDataStream::Qt_4_5);
    in	 >> this;
    file.close();
    }
    

    Dann bekomme ich für die Zeile 7 :

    in >> this;
    

    den folgenden Fehler vom Compiler, obwohl der Operator definiert und codiert ist:

    error: no match for 'operator>>' in 'in &g
    note: candidates are: QDataStream& QDataStream::operator>&g
    note: QDataStream& QDataStream::operator>&gt
    ....
    ...

    Hat jemand eine Idee ?

    Gruss



  • Ruf mal writeProcessData() auf und schau in die Datei rein 😛
    Du wirst dich wundern, denn da steht nur die Adresse des Objektes!
    Und warum? operator>> und operator<< verlangen eine Referenz auf dein Objekt, und keinen Pointer!!!
    also statt

    out << this;
    in >> this;
    

    bitteschön

    out << *this;
    in >> *this;
    

    🙂



  • Danke,

    das war kurz und schmerzlos 🙂

    Gruss


Anmelden zum Antworten