prova così:
codice:
//dizionario.h
...
template <class T,class S> typename Dizionario<T,S>::Lista::Elemento * Dizionario<T,S>::Lista::Ricerca(T chiave){
	Elemento *y=0;
    y=RestituisciPrimoElemento();
	while((y!=0) && (y->chiave!=chiave)){
		y=y->ElementoSuccessivo;}
	return y;
}

...

template <class T,class S>S Dizionario<T,S>::RicercaChiave(T chiave){
    int hashVal=GeneraHashVal(chiave);
	typename Dizionario<T,S>::Lista::Elemento *y=Tabella[hashVal].Ricerca(chiave);
	S dato=y->datoSatellite;
	if(dato!=0){return dato;}
	return 0;
}
compilato e linkato con successo con:
codice:
$ g++ --version
i686-apple-darwin8-g++-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc. build 5367)
Copyright (C) 2005 Free Software Foundation, Inc.