[ azzpoz @ 14.11.2013. 21:35 ] @
UNUTAR KLASE
Code:
friend ostream &operator<<(ostream &COUT, NizInt &obj);


VAN KLASE
Code:
ostream &operator << (ostream &COUT, NizInt &obj)
{
        for(int i=0;i<obj._trenutno;i++)
                cout<<" "<<obj._niz[i];

        return COUT;
}





std::ostream& NizInt::operator<<(std::ostream&, NizInt&)' must take exactly one argument
// <<< greška


Zašto mi se javlja greška ukoliko pokušam da operator preklapanja postavim unutar klase, tj. zašto mora biti "globalna" funkcija, definicija operatora???
[ Burgos @ 14.11.2013. 22:02 ] @
Ako imaš izraz

Code:
cout << obj


to se interpretira kao:

Code:
cout.operator<<(obj);


dakle - pokušava se sa pozivom operator<< nad objektom cout (ovaj: http://www.cplusplus.com/refer...stream/ostream/operator%3C%3C/), a ne tvoj operator. Dakle, moraš ovaj operator postaviti kao funkciju ne-članicu klase.

Slična stvar je i sa:

Code:

class X
{
    // ...
    int operator+(int j) { return m_vrednost + j; }
};

X x;
int res = 10 + x; // NE RADI - mora operator+(int j, conts X& x) 



Takođe, pročitaj ovaj članak Scott Meyers-a, u kome je opisano da zapravo ovakve funkcije ne ruše enkapsulaciju:

http://www.drdobbs.com/cpp/how...ions-improve-encapsu/184401197

A što se tiče tačno tvoje greške:

Code:
std::ostream& NizInt::operator<<(std::ostream&, NizInt&)' must take exactly one argument // <<< greška


binarni operator uzima dva operanda. Ako je funkcija članica klase, prvi operand je skriveni this pokazivač - dakle, možeš specificirati još samo najviše jedan operand, npr:

Code:
void NizInt::operator<<(int k);