Szablon klasy i problem z podziałem na pliki

0

Witam, zetknąłem się z najstępującym problemem: tworzę szablon klasy vector, która ma być ... wektorem.

Plik vector.hpp wygląda tak:

#ifndef VECTOR_HPP
#define	VECTOR_HPP

template<class T,int N>class vector {
public:
    vector(const T& ); // konstruktor
    vector(const vector& ); // konstruktor kopiujący
    const vector& operator=(const T& );
    const T& operator[](int i) const {
        return component[i];
    }     //zwraca ity element wektora

private:
    T component[N];
};

#endif	/* VECTOR_HPP */

plik vector.cpp:

#include "vector.hpp"

template<class T, int N> vector<T,N>::vector(const T& orig=0){
      for (int i =0 ; i< N ;i++)
        component[i]=orig;
}//constructor

template<class T, int N> vector<T,N>::vector(const vector<T,N>& v){
        for(int i =0 ; i < N; i++)
        component[i]=v.component[i];
}// copy coonstructor

template<class T, int N> const vector<T,N>& vector<T,N>::operator =(const T& a){
   for(int i =0;i<N;i++)
        component[i] = a;
   return *this;
   }
 

Plik main.cpp

 
#include <cstdlib>
#include <iostream>
#include "vector.hpp"

int main(int argc, char** argv) {

    vector<int,55> moj(12);
    std::cout << moj[4];
    return 0;
}

Błąd kompilatora: undefined reference to `vector<int, 55>::vector(int const&)'

Kod nie jest pisany przeze mnie - przepisany z książki, więc a priori zakładam że jest dobry. Ponieważ zabawę z c++ zacząłem niedawno, nie do końca wiem dlaczego tak się dzieje. Nie jest to "zadanie domowe", po prostu chciałbym aby to działało. Interesujące jest jednak to, że kiedy przekopiuję ciało konstruktora i wkleję w bloku klasy, problem znika. Wniosek jest taki, że w pliku .cpp jest błąd. I tu proszę o pomoc.

Piotrek

0

szablony klas muszą być w jednym pliku (da się to objeść, ale trzymaj się tego że ma być w jednym pliku). Przenieś cpp do hpp i powinno śmigać.

0

Dzkuję za odpowiedź! Śmiga!

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