Szablony i przeładowanie operatorów + i =

0

Witam!

Mam problem. Otóż mam szablon klasy:

template <class typ>
class FIFO
{
          struct element
          {
                 typ* wsk;
                 time_t czas;
                 struct element* next;
                 };
          struct element* lista;
      
      public:
             FIFO();
             FIFO(FIFO<typ> & a);
             ~FIFO();
             
             void wypisz();

             FIFO<typ>& operator=(FIFO<typ> k2);
             FIFO<typ> operator+(FIFO<typ> &k2);
};

z przeładowanymi operatorami poza ciałem klasy.

Gdy teraz w funkcji main wywołam:

FIFO<int> k1,k2,k3;
//......wypelnienie kolejek
k1=k2;
k3=k2;
//.... wypelnienie kolejek
(k1+k2).wypisz();

Program się kompiluje i działa tak jak powinien.

Jednak gdy wpiszę:

k3=k1+k2;

to kompilator (wbudowany w DevCpp oraz g++) wyrzuca takie komunikaty:

In function `int main(int, char**)': 
no matching function for call to `FIFO<int>::FIFO(FIFO<int>)' 
candidates are: FIFO<typ>::FIFO(FIFO<typ>&) [with typ = int]
initializing argument 1 of `FIFO<typ>& FIFO<typ>::operator=(FIFO<typ>) [with typ = int]' 
[Build Error]  [main.o] Error 1

Co robię źle?</cpp>

0

Od kiedy operator przypisania przyjmuje swój argument przez wartość? Zrób operator+ i konstruktor kopiujący tak żeby przyjmowały const referencje, poza tym operator+ w takim układzie mógłby być const.

kompilator (wbudowany w DevCpp oraz g++)

Kompilator 'wbudowany' w Dev C++ to g++...

0

Dzieki, pomoglo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1