今c++を独習しているのですが、
#include <iostream>
using namespace std;
template <class T>
class coord {
 T x,y;
public:
 coord(T i, T j)  { x=i; y=j; }
 friend ostream &operator<<(ostream &stream, coord ob);
 friend ostream &operator>>(istream &stream, coord &ob);
};
template <class T>
ostream &operator<<(ostream &stream, coord<T> ob)
{
 stream << ob.x << ' ' << ob.y << endl;
 return stream;
}
template <class T>
istream &operator>>(istream &stream, coord<T> &ob)
{
 stream >> ob.x >> ob.y;
 return stream;
}
int main()
{
 coord<int> i_ob(1,2);
 cout << i_ob << endl;
 return 0;
}

こういうコードコンパイルしたら「外部シンボルoperator<< ... が未解決」と怒られました。
どこを訂正すべきでしょうか?