[C++] Problema definizione di opertore +

di il
2 risposte

[C++] Problema definizione di opertore +

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
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:
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:
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?

2 Risposte

  • Re: [C++] Problema definizione di opertore +

    Il codice nel template non compila finché non viene chiamato quindi rivedi il tuo codice.
    Mi sarei aspettato un:
    
    DVector<int,isMoreOperator>::iterator it = 3 + a.begin();
    
    Questo avrebbe senso.
  • Re: [C++] Problema definizione di opertore +

    L'oepratore è definito in modo errato
    
    _Myt& operator+=(difference_type _Off)
    		{	// increment by integer
    			_Myindex += _Off;
    		return (*this);
    		}
    
    	_Myt operator+(difference_type _Off) const
    		{	// return this + integer
    		_Myt _Tmp = *this;
    		return (_Tmp += _Off);
    		}
    
    Questo è l'operatore + della classe iterator in VS.

    Come vedi è stato fatto in relazine dell'operatore +=.
    Cerca di fare lo stesso con la tua classe.
Devi accedere o registrarti per scrivere nel forum
2 risposte