Szablon klasy dziedziczący po innym szablonie - jak ma wyglądać operator << oraz konstruktor?

0

Mam taki szablon klasy

template<template <typename T> class X, typename U>
class kaka
{
    private:
        template <typename any>
        class test
        {
            private:
                any *x;
            public:
                test() {};
                test(int rozmiar) { x = new any [rozmiar]; };
                ~test() { delete [] x; };
                
                any & operator[](int i) { return x[i]; }; 
        };
        
        test<U> zm1;
        X<U> zm2;
        
        int m_rozmiar_array;
        int m_rozmiar_valarray;                
    public:
        kaka();
        kaka(int rozmiar_array, int rozmiar_valarray) : zm1(rozmiar_array), zm2(rozmiar_valarray) { m_rozmiar_array = rozmiar_array; m_rozmiar_valarray = rozmiar_valarray; };
        
        void show(void);
        void wypelnij(U zmienna);        
};

następnie szablon który dziedziczy po tym szablonie oraz prube przeciążenia operatora <<.

template <typename any, template <typename T> class X, typename U>
class bigos{};

template <typename any>
ostream & operator<<(ostream & os, bigos<typename any, template <typename T>  class X, typename U> & x);


template <typename any, template <typename T> class X, typename U>
class bigos : public kaka<X, U>
{
    private:
        any zmienna1;        
    public:
        bigos() {};
        bigos(any zm, int array, int val_array) : kaka<X, U>(array, val_array) { zmienna1 = zm;} ;
        
        friend template <typename any> ostream & operator<< <>(ostream & os, bigos<typename any, template <typename T> class X, typename U> & x);
        
        
};

i teraz tak szablon bigos ponieważ dziedziczy po kaka musi wywołać konstruktor szablonu kaka. ale dlaczego musiałem napisać kaka<X, U> a nie samo kaka.
oraz dlaczego przeciężonie operatora << skarzy się że muszę podać 3 argumenty template i że daje jeden a przecież dałem 3

0
  1. Nie rozumiem pytania. A skąd niby kompilator miałby wiedziec którymi parametrami szablonu bigos chcesz inicjalizować parametry szalbonu kaka? o_O
  2. Pokaż komunikat błędu.
0

[Error] wrong number of template arguments (1, should be 3)

i chodzi mi o to że skoro mam public kaka<X, U> to to wiadomo już jak wygląda klasa kaka, i jej konstruktor wywołuje normalnie poprzez jej nazwę a nie z parametrami w nawiasach ostrych

i jak robię bigos<int, std::valarray, int> test; to mam taki błąd
main.cpp:(.text$_ZN5bigosIiSt8valarrayiEC1Ev[_ZN5bigosIiSt8valarrayiEC1Ev]+0x14): undefined reference to `kaka<std::valarray, int>::kaka()'

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