Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Szablon klasy

Ostatnio zmodyfikowano 2013-12-11 21:32
Autor Wiadomość
rykukuku
Temat założony przez niniejszego użytkownika
Szablon klasy
» 2013-12-11 16:59:01
Witam, mam taki nagłówek szablonu klasy

C/C++
//plik dana.h
#ifndef DANA_H_
#define DANA_H_

class Perm;

template < typename T >

class Dana
{
private:
    T * wektor;
    int n; //dlugosc wektora
   
   
public:
    friend class Perm;
   
    Dana();
    Dana( int w ); //konstruktor
    ~Dana(); //destruktor
    Dana( const Dana & d );
   
    void pokaz() const; //pokazuje wektor
   
    Dana & operator =( const Dana & d ); //operator przypisania danych od innego obiektu
    Dana & operator =( const T * tab ); //opertor przypisania danych z tablicy dyn, pierwsza liczba jest wielkością tablicy
    T operator []( const int & idx ) const; //operator indeksowania
    operator T *() const; //opertor konwersji na tablicę parametrow
   
    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ę:

C/C++
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]
P-98987
Adik80
» 2013-12-11 19:18:01
jakis specyficzny powod czemu wrzucasz definicje sablonu do cpp?
P-98996
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.
P-98998
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.
P-99002
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
P-99004
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.
P-99005
Monika90
» 2013-12-11 20:40:13
tu: http:/​/coliru.stacked-crooked.com/a​/060bc28a735d894f
nie ma błędu, więc nie pokazujesz nam czegoś istotnego.
P-99007
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.
P-99008
« 1 » 2
  Strona 1 z 2 Następna strona