Windows 7 - Visual Studio 2010

Qual'è la corretta implementazione dell'overloading per gli stream operator << e >> per una class templates?

Esempio:

codice:
template <typename T>
class myClass
{
	// Overloading dell'operatore di output <<
	friend ostream & operator<<( ostream &output, const myClass &right );

	// Overloading dell'operatore di input >>
	friend istream & operator>>( istream &input, myClass &right );
};

Il problema è che cercando di implementarle nel .h ottengo errori di linker. Qual'è la soluzione corretta?

Inoltre perchè per i compilatore non cè differenza tra una dichiarazione del tipo:

codice:
template <typename T>
class myClass
{
	void funct( myClass &obj );
};
Ed una dichiarazione del tipo:
codice:
template <typename T>
class myClass
{
	void funct( myClass<T> &obj );
};
Qual'è la forma corretta? E perchè?

Grazie.