C2593: Operator << ist mehrdeutig



  • Ich weiß nicht genau in welchem Forum ich das posten soll, daher hier. Folgendes Problem. Ich möchte eine QList mit einer eigenen Klasse in eine Datei speichern. Da QT meine eigene Klasse zum serialisieren nicht bekannt ist, habe ich die entsprechenden Operatoren überladen. Das hatte unter Linux einwandfrei funktioniert. Nun versuche ich das Programm unter Windows mit dem VC Compiler zu compilieren. Leider meckert er da. Hier mal kurz mein Code.

    QFile file(dir.absoluteFilePath(this->mName));
        if (file.open(QIODevice::ReadOnly))
        {
            QDataStream load(&file);
            load >> mFiles; //die stelle wo der Fehler kommt
            file.close();
        }
    

    Ich habe aber die Operatoren überladen. Unzwar so

    QDataStream &operator >> (QDataStream &s, QList<gdms::File> *file){
        s >> file;
        return(s);
    }
    

    Was kann ich nun tun um den Fehler zu beheben? Hab irgendwie gelesen, dass der Compiler sich nicht richtig entscheiden kann in welchen Typ er jetzt konvertieren soll.



  • Eine Fehlermeldung zu posten, wäre hilfreich gewesen.
    Sicher, dass mFiles ein Pointer auf QListgdms::File ist?
    Und noch was: Die Endlosrekursion, bemerkst du die?
    Du rufst im ersten Codeschnipsel den Operator auf und im Operator rufst du wieder exakt den gleichen Operator auf.
    Das kann doch so nicht stimmen.


  • Mod

    Welchen Datentypen hat mFiles?



  • mFiles ist vom Datentyp QListgdms::File. Hab das auch schon mehrfach überprüft.



  • Bennisen schrieb:

    mFiles ist vom Datentyp QListgdms::File.

    Dein Operator erwartet jedoch einen Pointer dieses Datentyps.
    Und ich würde sie per Referenz übergeben, wenn ich du wär.



  • 5654757546 schrieb:

    Bennisen schrieb:

    mFiles ist vom Datentyp QListgdms::File.

    Dein Operator erwartet jedoch einen Pointer dieses Datentyps.
    Und ich würde sie per Referenz übergeben, wenn ich du wär.

    Wie meinst du das? hab mFiles zu einem Pointer gemacht, aber das ändert nichts.



  • Wenn mFiles ein Pointer auf den gewünschten Datentyp ist sollte es idR klappen.
    Kann es sein, dass du deinen Operator im Header definierst? Wenn dem so ist, dann setz mal ein inline davor.


Log in to reply