Szablon klasy
Ostatnio zmodyfikowano 2013-12-11 21:32
rykukuku Temat założony przez niniejszego użytkownika |
Szablon klasy » 2013-12-11 16:59:01 Witam, mam taki nagłówek szablonu klasy #ifndef DANA_H_ #define DANA_H_
class Perm;
template < typename T >
class Dana { private: T * wektor; int n; public: friend class Perm; Dana(); Dana( int w ); ~Dana(); Dana( const Dana & d ); void pokaz() const; Dana & operator =( const Dana & d ); Dana & operator =( const T * tab ); T operator []( const int & idx ) const; operator T *() const; Dana < T > operator *( const Perm & d ) const; }; #define new new(_NORMAL_BLOCK, __FILE__, __LINE__) #endif
Mam drugi plik cpp z definicjami fukcji. Mam problem z ostatnim przeciążeniem operatora '*'. Kompilator wyrzuca mi, że error C2039: '*' : is not a member of 'Dana<T>' . Co jest źle? Proszę o pomoc. Poniżej wklejam definicję: template < typename T > Dana < T > Dana < T >::operator *( const Perm & d ) const { if( n != d.n ) { exit( EXIT_FAILURE ); } if( wektor == NULL || d.perm == NULL ) { return * this; } Dana < T > nowy; nowy.wektor = new T[ d.n ]; nowy.n = n; for( int i = 0; i < n; i++ ) { nowy.wektor[ i ] = wektor[ d.perm[ i ] - 1 ];; } return nowy; } [/i] |
|
Adik80 |
» 2013-12-11 19:18:01 jakis specyficzny powod czemu wrzucasz definicje sablonu do cpp? |
|
rykukuku Temat założony przez niniejszego użytkownika |
» 2013-12-11 19:29:08 Wymagania projektu. Ma być każda klasa w 2 plikach. |
|
Monika90 |
» 2013-12-11 20:07:10 A w jaki sposób próbujesz używać tego operatora *? Ma być każda klasa w 2 plikach. |
Możesz tak zrobić, ale będziesz musiał inkludować plik z definicjami w każdej jednostce translacji, która używa szablonu. |
|
rykukuku Temat założony przez niniejszego użytkownika |
» 2013-12-11 20:30:03 Mam 2 klasy. Jedna reprezentująca wektor, druga permutację. Gdy użyję Wektor*Permutacja, to ma to zwrócić wektor po permutacji. Jednostka translacji, to po prostu każdy plik z kodem gdzie używam szablonu? Jeśli tak , to już tego próbowałem i dalej nie działa. Kompilator wypluwa ten sam błąd. :c |
|
kubawal |
» 2013-12-11 20:32:23 Czasem MSVC jest wybredny (jak wszystko 'made in M$' ;) i lubi, jak definicje wszystkich funkcji szablonów do headera. |
|
Monika90 |
» 2013-12-11 20:40:13 |
|
rykukuku Temat założony przez niniejszego użytkownika |
» 2013-12-11 20:40:23 CodeBlocks wypluwa to: error: no 'Dana<T> Dana<T>::operator*(const Perm&) const' member function declared in class 'Dana<T>' :/ Więc nie tylko M$ taki wybredny. |
|
« 1 » 2 |