Szablon klasy dziedziczący po innym szablonie - jak ma wyglądać operator << oraz konstruktor?
Ostatnio zmodyfikowano 2014-02-03 14:48
debilek Temat założony przez niniejszego użytkownika |
Szablon klasy dziedziczący po innym szablonie - jak ma wyglądać operator << oraz konstruktor? » 2014-02-01 13:21:43 witam mam takie coś: #ifndef __TEST__ #define __TEST__
#include <iostream> using namespace std;
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 ); }; template < template < typename T > class X, typename U > void kaka < X, U >::show( void ) { for( int i = 0; i < m_rozmiar_array; i++ ) cout << "zm1[i]: " << zm1[ i ] << endl; cout << endl << endl; for( int i = 0; i < m_rozmiar_valarray; i++ ) cout << "zm2[i]: " << zm2[ i ] << endl; } template < template < typename T > class X, typename U > void kaka < X, U >::wypelnij( U zmienna ) { for( int i = 0; i < m_rozmiar_array; i++ ) zm1[ i ] = zmienna; for( int i = 0; i < m_rozmiar_valarray; i++ ) zm2[ i ] = zmienna; }
template < typename any, template < typename T > class X, typename U > class bigos;
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; }; }; #endif
oraz main #include <iostream> #include <valarray> #include "test.h"
int main() { kaka < std::valarray, int > zm1( 10, 10 ); bigos < int, std::valarray, int > zm2( 5, 10, 10 ); zm1.wypelnij( 10 ); zm1.show(); bigos < int, std::valarray, int > test; return 0; }
ta linijka bigos<int, std::valarray, int> test; kiedy jest za komentowana wszystko się kompiluje. a jak nie to mam taki błąd main.cpp:(.text$_ZN5bigosIiSt8valarrayiEC1Ev[_ZN5bigosIiSt8valarrayiEC1Ev]+0x14): undefined reference to `kaka<std::valarray, int>::kaka()' następnie próba przeciążenia operatora << kiedy ją od komentuje mam taki błąd [Error] wrong number of template arguments (1, should be 3) i nierozumień jednej rzeczy, jak wiadomo konstruktor klasy pochodenej musi wywołać konstruktor klasy bazowej. Ale dlaczego tutaj muszę napisać kaka<X, U> a nie samo kaka proszę o pomoc |
|
DejaVu |
» 2014-02-03 14:48:01 bigos( any zm, int array, int val_array ) : kaka < X , U >( array, val_array ) { zmienna1 = zm; };
Zamień na:
bigos( any zm, int array, int val_array ) : kaka( array, val_array ) { zmienna1 = zm; };
PS. Podaj inną nazwę konta na jaką ma zostać ono zmienione jeżeli nie chcesz, aby zostało ono usunięte. |
|
« 1 » |