[ azzpoz @ 28.11.2013. 21:21 ] @
Code:
#include <iostream>
using namespace std;

template <class TIP>
class Konstrukcija
{
      TIP *niz;
      int _trenutno; // trenutna poz. u nizu
      int _max;      // maksimalno elemenata
      
public:
       Konstrukcija()
       {
                     _trenutno = 0;
                     _max = 10;
                     niz = new TIP[_max];
       }
//bez destruktora i sl...
      
      void dodaj(TIP obj)
      {
           niz[_trenutno] = obj;
           ++_trenutno;
      }
      
     friend ostream &operator<< <>(ostream &, Konstrukcija<TIP> &);   // <<<<<<<<<<<<<<<<<<<<
   //  upitno je kada stavim   <>    , ali i ovako ne radi


};

template <class TIP>
ostream &operator<<(ostream &OUT, Konstrukcija<TIP> &obj)
{
        for(int i=0; i<obj._trenutno; i++)
                OUT << obj._niz[i];
        return OUT;
}
int main()
{
    Konstrukcija<int> stub;
    
    stub.dodaj(2);
    stub.dodaj(10);
    
    cout << stub;
system("pause>0"); return 0;
}


Uspijem koristiti program s funkcijom clanicom koja koja je tipa void i slicna funkciji operatora<<, ali zasto preklopljeni operator ne radi???
[ Burgos @ 28.11.2013. 21:33 ] @
Potrebno je da kompajleru ostaviš deklaracije, pre friend iskaza:


Code:
#include <iostream>
using namespace std;


// 2. Međutim, sama deklaracija zahteva deklaraciju klase Konstrukcija
//     zbog parametra obj
template <class TIP>
class Konstrukcija;


// 1. Potrebno je da ostaviš deklaraciju operator<< 
template <class TIP>
ostream &operator<<(ostream &OUT, Konstrukcija<TIP> &obj);


template <class TIP>
class Konstrukcija
{
      TIP *niz;
      int _trenutno; // trenutna poz. u nizu
      int _max;      // maksimalno elemenata

public:
       Konstrukcija()
       {
                     _trenutno = 0;
                     _max = 10;
                     niz = new TIP[_max];
       }
//bez destruktora i sl...

      void dodaj(TIP obj)
      {
           niz[_trenutno] = obj;
           ++_trenutno;
      }
     // moze i operator<< <TIP>(...
     friend ostream &operator<< <>(ostream &, Konstrukcija<TIP> &);   // <<<<<<<<<<<<<<<<<<<<
   //  upitno je kada stavim   <>    , ali i ovako ne radi


};

template <class TIP>
ostream &operator<<(ostream &OUT, Konstrukcija<TIP> &obj)
{
        for(int i=0; i<obj._trenutno; i++)
                OUT << obj.niz[i];
        return OUT;
}
int main()
{
    Konstrukcija<int> stub;

    stub.dodaj(2);
    stub.dodaj(10);

    cout << stub;
    return 0;
}
[ azzpoz @ 29.11.2013. 06:29 ] @
Koji je razlog za ostavljanje deklaracije klase i operatora pre friend iskaza???
[ Burgos @ 29.11.2013. 09:23 ] @
Zapravo, samo je bitno ostaviti deklaraciju funkcije pre friend iskaza. Međutim, pošto u deklaraciji funkcije figuriše klasa, potrebno je ostaviti i deklaraciju klase pre nje.

Da ja sad ne bih bespotrebno uprošćavao, ili prekucavao, evo odličan članak na tu temu: http://www.parashift.com/c++-faq-lite/template-friends.html