Possible Duplicate:
Why can templates only be implemented in the header file?
What is an undefined reference/unresolved external symbol error and how do I fix it?
I have defined a template class in a file.
point.h is
#ifndef POINT_H
#define POINT_H
using namespace std;
template <typename T, int size>
class point {
private:
    T coordinates[size];
public:
    point();
    void set_coordinates(const T *);
    void get_coordinates(T *);
};
#endif  /* POINT_H */
point.c is
#include "point.h"
template <typename T, int size>
point::point() {
    for (int i = 0; i < size; i++)
        coordinates[i] = 0;
}
template <typename T, int size>
void point<T, size>::set_coordinates(const T *coordinates) {
    for (int i = 0; i < size; i++)
        this->coordinates[i] = coordinates[i];
}
template <typename T, int size>
void point<T, size>::get_coordinates(T *coordinates) {
    for (int i = 0; i < size; i++)
        coordinates[i] = this->coordinates[i];
}
I am using this template as point<int, 2> p0;. But compiler gives error that point<int, 2> is not defined.
I searched on this and found two solutions -
1. to use export variable. But I read that it is not supported by all compilers. So, I don't want to use that.
2. to create explicit class specializations like
template <> class point<int> {
    ...
}
But isn't there any other way to do this? (I mean in C++ standard containers, they might have used some technique to do this.)
 
     
     
     
    