Infatti ho notato che si creano un po' di problemi.
Allora ti posto le definizioni degli operatori all'interno di stack:
codice:
template<typename T>
bool stack<T>::operator==(stack<T> &nuovo)
{return this == &nuovo;}

template<typename T>
bool stack<T>::operator!=(stack<T> &nuovo)
{return this != &nuovo;}
Mentre il codice del metodo find è il seguente:
codice:
template <class T>
iterator<T> stack<T>::find(T const &d){
    iterator<T> iter; 
    iter.pos=this->top;
    T dato=((iter.pos)->getData());//get data è un metodo che semplicemente ritorna T dat 
    while((dato!=d) && ((iter.pos)!=this->tail)) {
        ++iter;
        dato=((iter.pos)->getData());//
    }
    if(dato==d) return iter;
    else{ 
        iter.pos=NULL;
        return iter;
    }
};
Spero di aver messo tutto