// Predeclaraciones template struct Diccionario; template void crear(Diccionario& d); template bool anyadir(Diccionario& d, const K& k, const V& v); template bool quitar(Diccionario& d, const K& k); template bool buscar(const Diccionario& d, const K& k, V& v); template int cardinal(const Diccionario& d); template bool esVacio(const Diccionario& d); template void duplicar(const Diccionario& dEnt, Diccionario& dSal); template bool operator==(const Diccionario& d1, const Diccionario& d2); template void liberar(Diccionario& d); template void iniciarIterador(Diccionario& d); template bool existeSiguiente(const Diccionario& d); template bool siguiente(Diccionario& d, K& k, V& v); // Declaración template struct Diccionario { friend void crear(Diccionario& d); friend bool anyadir(Diccionario& d, const K& k, const V& v); friend bool quitar(Diccionario& d, const K& k); friend bool buscar(const Diccionario& d, const K& k, V& v); friend int cardinal(const Diccionario& d); friend bool esVacio(const Diccionario& d); friend void duplicar(const Diccionario& dEnt, Diccionario& dSal); friend bool operator==(const Diccionario& d1, const Diccionario& d2); friend void liberar(Diccionario& d); friend void iniciarIterador(Diccionario& d); friend bool existeSiguiente(const Diccionario& d); friend bool siguiente(Diccionario& d, K& k, V& v); // Representación de los valores del TAD private: ... }; // Implementación de las operaciones template void crear(Diccionario& d) { ... } ...