← Back to team overview

dolfin team mailing list archive

Re: Parameter.h

 

On Fri, 2006-03-24 at 16:58 -0600, Anders Logg wrote:
> Do you mean the following?
> 
>     Iterator& operator++();
>     Iterator& operator--();
> 
> Operators ++ and -- return a reference to an iterator so you can do
> things like
> 
>     Iterator it;
>     (++it)->foo();
> 
> I think this is fairly standard.
> 
> But I agree that the PArray class probably looks funny in many
> ways... I have wanted to remove it for a long time, but the Mesh class
> relies heavily on it so it would require a bit of work. (And since
> Sieve should be pretty close, it may be unecessary to put in that
> work.)
> 
> I can't figure out why you get problems with the compilation.
> 
> Does it help if you move the definition of the operators in question
> from below (line 443) and just throw them directly in to the class
> definition?
> 

Yes, then it works fine. 

I found a lot of information on how to define functions outside of a
template, but not for classes which are nested inside a template. 

Given that PAraay.h should disappear soon, I'll move the functions into
the class.

Garth

> So you would have just
> 
>   Iterator& operator++()
>   {
>     if ( _index == (size - 1) )
>       at_end = true;
>     else {
>       at_end = false;
>       _index++;
>     }
>     
>     element = array + _index;
>     
>     return *this;
>   }
> 
> and similarly for operator-- in the definition of the class Iterator
> instead of all the other crap with typename etc below?
> 
> The reason it looks like this is that I wanted to move the
> implementation to somewhere else (like to a .cpp file but I can't do
> that with a template). You can do this by figuring out the correct
> (but hard to get right) syntax, but it's easier to get through the
> compiler if you just stick the code in the class definition.
> 
> /Anders
> 
> 
> On Fri, Mar 24, 2006 at 11:05:33PM +0100, Garth N. Wells wrote:
> > On Fri, 2006-03-24 at 14:20 -0600, Anders Logg wrote:
> > > Hmm... 
> > > 
> > > I don't like these errors. I don't remember why I put in the
> > > "typename" at all, but probably to get around some compiler errors
> > > that gcc gave me previously. What happens if you just remove the word
> > > "typename"?
> > > 
> > still doesn't work. The class Iterator looks funny to me. The class is
> > called Iterator, and has member functions which return the address of an
> > Iterator.
> > 
> > Garth 
> > 
> > > PArray.h will be removed as soon as we replace the mesh backend with
> > > Sieve (whenever that may be, we're still waiting for Sieve but it
> > > should come soon).
> > > 
> > > /Anders
> > > 
> > > 
> > > On Fri, Mar 24, 2006 at 06:56:35PM +0100, Garth N. Wells wrote:
> > > > That works. I did that but wasn't sure if it had any consequences.
> > > > 
> > > > The only remaining problem I have that I haven't figured out yet is in
> > > > PArray.h. The error messages are below.
> > > > 
> > > > I picked up a whole bunch of other small errors, but it might take me a
> > > > few days to get them all checked in.
> > > > 
> > > > Garth
> > > > 
> > > > ./../../src/kernel/common/dolfin/PArray.h(445): error: overloaded
> > > > function "dolfin::PArray<T>::Iterator::Iterator" is not a type name
> > > >     template <class T> typename PArray<T>::Iterator::Iterator&
> > > >                                 ^
> > > > 
> > > > ../../../src/kernel/common/dolfin/PArray.h(446): error: declaration is
> > > > incompatible with "dolfin::PArray<T>::Iterator
> > > > &dolfin::PArray<T>::Iterator::operator++()" (declared at line 147)
> > > >     PArray<T>::Iterator::operator++()
> > > >                          ^
> > > > 
> > > > ../../../src/kernel/common/dolfin/PArray.h(460): error: overloaded
> > > > function "dolfin::PArray<T>::Iterator::Iterator" is not a type name
> > > >     template <class T> typename PArray<T>::Iterator::Iterator&
> > > >                                 ^
> > > > 
> > > > ../../../src/kernel/common/dolfin/PArray.h(461): error: declaration is
> > > > incompatible with "dolfin::PArray<T>::Iterator
> > > > &dolfin::PArray<T>::Iterator::operator--()" (declared at line 149)
> > > >     PArray<T>::Iterator::operator--()
> > > >                          ^
> > > > 
> > > > 
> > > > On Fri, 2006-03-24 at 11:03 -0600, Anders Logg wrote:
> > > > > Does it work if you remove the dolfin:: in Parameter.h? I don't know
> > > > > why it's there. I just pushed a changeset where this is removed. Check
> > > > > if that works.
> > > > > 
> > > > > /Anders
> > > > > 
> > > > > On Fri, Mar 24, 2006 at 05:58:18PM +0100, Garth N. Wells wrote:
> > > > > > Any ideas what's wrong here in Parameter.h? I'm testing the Intel C++
> > > > > > compiler.
> > > > > > 
> > > > > > Garth
> > > > > > 
> > > > > > ../../../src/kernel/parameter/dolfin/Parameter.h(89): error: no instance
> > > > > > of overloaded function "dolfin::operator<<" matches the specified type
> > > > > >       friend LogStream& dolfin::operator<<(LogStream& stream, const
> > > > > > Parameter& parameter);
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > _______________________________________________
> > > > > > DOLFIN-dev mailing list
> > > > > > DOLFIN-dev@xxxxxxxxxx
> > > > > > http://www.fenics.org/cgi-bin/mailman/listinfo/dolfin-dev
> > > > > > 
> > > > 
> > > > 
> > > > 
> > > > _______________________________________________
> > > > DOLFIN-dev mailing list
> > > > DOLFIN-dev@xxxxxxxxxx
> > > > http://www.fenics.org/cgi-bin/mailman/listinfo/dolfin-dev
> > > > 
> > 
> > 
> > 
> > _______________________________________________
> > DOLFIN-dev mailing list
> > DOLFIN-dev@xxxxxxxxxx
> > http://www.fenics.org/cgi-bin/mailman/listinfo/dolfin-dev
> > 





Follow ups

References