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