Serializace vlastní třídy v Qt – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Serializace vlastní třídy v Qt – C / C++ – Fórum – Programujte.comSerializace vlastní třídy v Qt – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
ingiraxo+15
Grafoman
22. 3. 2012   #1
-
0
-

Opět zdravim,
můžete mi prosím jen říct, co mám špatně? Řešil jsem to i podle ofic. dokumentace, ale stále mi to píše, že operátor >> a << má příliš mnoho parametrů a to jsem to bral přímo z příkladu v dokumentaci, takže netuším, kde je chyba nebo co tomu vadí...

#include <QObject>
#include <QMetaProperty>
#include <QDataStream>
#include <QIODevice>

struct Item
{
    int cislo;
    QString jmeno;
    QByteArray data;

    Item() { }
    Item(int cislo, QString jmeno, QByteArray data)
    {
        this->cislo = cislo;
        this->jmeno = jmeno;
        this->data = data;
    }

    QDataStream &operator << (QDataStream &out, const Item &item)
    {
        out << item.cislo;
        out << item.jmeno;
        out << item.data;
        return out;
    }

    QDataStream &operator >> (QDataStream &in, Item &item)
    {
        in >> item.cislo;
        in >> item.jmeno;
        in >> item.data;
        return in;
    }
};
Q_DECLARE_METATYPE(Item)

class Test : public QObject
{
    Q_OBJECT

public:
    Test(Item item, QObject *parent = 0) : QObject(parent)
    {
        this->item = item;
    }

    QByteArray serialize()
    {
        QByteArray out;
        QDataStream stream(&out, QIODevice::WriteOnly);

        stream << item;
        return out;
    }

    static Item deserialize(QByteArray data)
    {
        Item item;
        QDataStream stream(&data, QIODevice::ReadOnly);

        stream >> item;
        return item;
    }

private:
    Item item;
};

PS: Druhy chyb co mi to vypíše: Chyba:C2804: binary 'operator <<' has too many parameters Chyba:C2333: 'Item::operator <<' : error in function declaration; skipping function body Chyba:C2679: binary '<<' : no operator found which takes a right-hand operand of type 'Item' (or there is no acceptable conversion) dík

Nahlásit jako SPAM
IP: 46.183.64.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
ondra.holub+1
Stálý člen
22. 3. 2012   #2
-
+1
-
Zajímavé

Pokud uděláš nějaký operátor jako metodu třídy/struktury, tak musíš počítat s tím, že this je první (levý) parametr toho operátoru. To ovšem v daném případě nechceš (levý operand chceš mít QDataStream). Takže to udělej tak, jak to máš, jenom ty operátory vytáhni ven ze třídy Item.

Nahlásit jako SPAM
IP: 194.138.12.–
ingiraxo+15
Grafoman
22. 3. 2012   #3
-
0
-

ahaa, dík.. já vim jak fungujou operátory, ale abych řekl, pravdu, tak mě nikdy nenapadlo to dát mimo třídu/struktůru, takže jsem stále řešil jak na to uvnitř objektu =)

Nahlásit jako SPAM
IP: 46.183.64.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 130 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý