Nefunguje mi operátor << – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Nefunguje mi operátor << – C / C++ – Fórum – Programujte.comNefunguje mi operátor << – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
ingiraxo+15
Grafoman
28. 3. 2012   #1
-
0
-

Zdravim,
trochu řešim operátor >> a stále mi to nějak nejde, operátor << byl v pohodě, ale tento nevim nějak.
Můžete mi prosím říct, kde mám chybu? 

#include <iostream>
#include <vector>

using namespace std;

template <typename T>
class Test
{
public:
    Test() : iVector() { }

    void vypis()
    {
        for (unsigned int i = 0; i < iVector.size(); i++)
            cout << iVector.at(i) << endl;
    }

    // toto mi funguje bez problemu
    Test operator << (const T value)
    {
        iVector.push_back(value);
        return *this;
    }

    // tady mam nekde chybu
    // jendoduse potrebuju, aby to odebralo prvek a ten mi to vratilo pres funkci
    // zde by fce ani nemusela mit parametr, ale je potreba 1
    T operator >> (Test&)
    {
        T temp = iVector.at(0);
        iVector.pop_back();
        return temp;
    }

private:
    vector<T> iVector;
};

int main()
{
    Test<int> test;

    // prida 2 cisla
    test << 23;
    test << 11;

    // zde potrebuju odebrat cislo a to ulozit do "value"
    int value;
    test >> value;

    test.vypis();

    return 0;
}

Díky :)

PS: v nadpise je chyba, jedná se o operátor >> nikoli << :(

Nahlásit jako SPAM
IP: 46.183.64.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Reklama
Reklama
KIIV+42
God of flame
28. 3. 2012   #2
-
+1
-
Zajímavé

   

// doporucuju:
    Test<T> & operator>>(T & out)
    {
        out = iVector.at(0);
        iVector.pop_back();
        return *this;
    }

// a pak lze udelat i:
objekt >> a >> b >> c;

nicmene tam mas chybu - vracis prvni prvek ale odebiras posledni...

a nekontrolujes jestli je jeste co odebirat!

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
ingiraxo+15
Grafoman
28. 3. 2012   #3
-
0
-

#2 KIIV
díky, mě nějak nenapadlo to vrátit přes parametr :)
jinak vim, že to je neošetřený i chybný (iVector.size()-1), ale řešil jsem hlavně operátor

Nahlásit jako SPAM
IP: 46.183.64.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
KIIV+42
God of flame
28. 3. 2012   #4
-
0
-

no ono to neni nahoda ... pokud mas operator>>(& neco) ve tride:  tak je to      trida >> neco;  a to co zustane jako vysledek po teto operaci je pak to co se vraci returnem! tj ani by to nemohlo fungovat pokud bys neudelal   neco = trida >> dummy;

http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
KIIV+42
God of flame
28. 3. 2012   #5
-
0
-

mimochodem  << operator bude mit osklivej side effect - bude kopirovat objekt, takze pokud udelas:   test << 1 << 2;

tak ta dvojka se ulozi do kopie, ktera zase zanikne a proste se "ztrati"...   takze to chce aspon vracet referenci  &  stejne jako u  >>

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
ingiraxo+15
Grafoman
28. 3. 2012   #6
-
0
-

#5 KIIV
jo, já to teď mám jako: 

    Queue<T>& operator << (const T item)
    {
        add(item); // pridava prvek
        return *this;
    }

    Queue<T>& operator >> (T& item)
    {
        item = removeAndGet(); // vraci odebrany prvek
        return *this;
    }

Což by mělo být správně už

Nahlásit jako SPAM
IP: 46.183.64.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
ingiraxo+15
Grafoman
28. 3. 2012   #7
-
0
-

btw. když už jsem u těch operátorů, jak se vůbec vytváří operátor << na funkci?
např. Qt mají funkci: 

qDebug(...) << neco;

Ale, nějak netušim, jak se takovej operátor zapisuje

Nahlásit jako SPAM
IP: 46.183.64.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
KIIV+42
God of flame
28. 3. 2012   #8
-
+1
-
Zajímavé

#7 ingiraxo
nedela se na funkci ale na to, co funkce vraci

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
crazy
~ Moderátor
+10
Grafoman
28. 3. 2012   #9
-
0
-

#7 ingiraxo
qDebug() ti vrací objekt QDebug, takže to vlastně posíláš tomu objektu...

Nahlásit jako SPAM
IP: 195.113.242.–
All you need is vision and time.
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, 113 hostů

Podobná vlákna

Operátor -> — založil Adam

Operator - — založil yaqwsx

Operator&lt;&lt; — založil Gadael

Operátor &lt;&lt; — založil RePRO

Moderátoři diskuze

 

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