Re: Operator as non-function
On Feb 15, 2:51 am, saneman <y...@dd.com> wrote:
Victor Bazarov wrote:
saneman wrote:
In a .h file I have:
friend iterator operator + <> (difference_type i, const iterator& it);
and outside the class I have:
template<class A>
hat_iterator<A> operator + (typename A::difference_type i,
const hat_iterator<A>& it) {
return hat_iterator<A>(it._pos + i, it._hat);
}
But when I compile I get:
error: declaration of ?operator+? as non-function
Is it a wrong definition?
Depends on the declaration. Post _complete_ code. Remove all parts
that are irrelevant, but keep the code compilable.
The below code:
template <class A>
class BOB {
private:
typedef BOB<A> iterator;
public:
typedef typename A::difference_type difference_type;
friend iterator operator + <> (difference_type i, const iterator& =
it);
};
Gives the error:
hat_iterator.h:11: error: declaration of ?operator+? as non-function
hat_iterator.h:11: error: expected ?;? before ?<? token
But both arguments have been typedefed so I cannot see where
the error is.
The problem is that the compiler doesn't know that the operator+
in question is (or might be) a template, and so interprets the <
after it as less than. You need a declaration of the operator+
in scope before defining the class. Something like:
template< class A > class BOB ;
template< class A > BOB<A> operator+(
typename BOB<A>::difference_type,
BOB<A> const& ) ;
before your class template definition.
I'm not sure, but I think your friend declaration should also
be:
friend iterator operator + <A> (difference_type i, const iterator&
it);
g++ accepts it either way, however. (I'm not sure what the
relationship between BOB and hat_iterator is, however.)
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34