Sto svolgendo un progetto di un array dinamico di tipo qualunque T,

in dvector.h ho tutte le funnzioni di normale funzionamento del vettore e lì non ci sono problemi
Sempre in dvector.h ho una nested class iterator

codice:
template <class T,class Functor> class DVector{
        //funzioni e attributi.......

         class iterator {
             //funzioni della classe iterator
         }

         iterator begin(){............}   //funzione che ritorna l'iteratore che punta al primo dato dell'array

}
Ora voglio definire un opertore globale + di questo tipo: n+i dove n è un intero e i è un iteratore, metto in fondo questo:

codice:
template<typename T,typename Functor> typename DVector<T,Functor>::iterator &operator+(const int &n,const typename  DVector<T,Functor>::iterator &ma){
	return ma+n;	
}
lasciando perdere cosa fa ma+n che vi assicuro al 100% che non da errori, questo codice compila perfettamente ma nel momento in cui nel main faccio:

codice:
DVector<int,isMoreOperator> a;       //lasciate perdere a cosa serve il funtore "isMoreOperator", non è il nostro problema
3+a.begin();
questo da errore:
no match for ‘operator+’ in ‘3 + DVector<T, Functor>::begin() const [with T = int, Functor = isMoreOperator]()’

ovviamente ho incluso il file.h nel mainì
Avete idea da dove possa provenire questo errore?
Perchè non trova la funzione?