Um... to na wielu poziomach wygląda dziwnie.
Proponuję, żebyś najpierw rozpisał to wszystko bez szablonów i upewnił się że mają sens, a dopiero potem oszablonował to, co potrzebujesz.
Z konkretów, kilka z brzegu:
template <typename Type> // nie wolno deklarowac wewnątrz funkcji
int main()
main() nie może być szablonem - nie ma sensu, by był. Skąd ma wiedzieć, jaki jest argument szablonu?
obiekt.Kosciol<Type>::Show();
obiekt.Oltarz<Type>::Show();
Nawet bez szablonów nie wiem, co tu chcesz osiągnąć :/
void Set(const Type & item)
{
std::cout << "Podaj nazwe parafii: ";
std::getline(std::cin, item.parafia);
Próbujesz modyfikować obiekty przez const referencje. Ponadto, item.parafia jest prywatne.
class Oltarz : public Kosciol
Czemu ołtarz jest kościołem?