Specjalizacja szablonu funkcji

0

Witam. Mam strukturę pudelko i moim zadaniem jest napisanie specjalizacji szablonu, która będzie pobierała dwa parametry typu pudelko i zwracała jeden obiekt pudelko o większej pojemności. I teraz:

#include <iostream>

//using namespace std;
struct pudelko
{
    char producent[40];
    float pojemnosc;
};
pudelko a{"zoliborz",18},b{"mank",12};
template <typename T>
T maks(T para,T parb)
{
    return para<parb?parb:para;
}
template<>pudelko & maks<pudelko>(const pudelko & a,const pudelko & b)
{
    std::cout<<"Wyspecjalizowana"<<std::endl;``
    return a.pojemnosc<b.pojemnosc? b:a;
}
int main()
{
    //Pytanie 8
    pudelko nowa;
    nowa=maks(a,b);
    std::cout<<"Pojemnosc: "<<nowa.pojemnosc<<std::endl;
    system("pause");
    return 0;
}

jeśli usunę referencje z szablonu - kod się kompiluje i wyświetla poprawną wartość, natomiast w takiej formie jak teraz pojawiają się błedy:

error: template-id 'maks<pudelko>' for 'pudelko& maks(const pudelko&, const pudelko&)' does not match any template declaration|
error: no match for 'operator<' (operand types are 'pudelko' and 'pudelko')|

Pewnie problem leży w moim niepełnym zrozumieniu zagadnień związanych z szablonami (dopiero się ucze C++), ale znalazłaby się jakaś dobra dusza, która powiedziałaby mi co robię źle?

1

Szablony w dużej mierze to proste podmiany. Jeśli masz T maks(T para,T parb) to za wszystkie T musisz podstawić to samo, aby było zgodne. pudelko&pudelko const&

0

Dzięki!

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