On Thu, Jun 12, 2008 at 05:41:36PM +0100, Nuno David Lopes wrote: > Isn't the code: > ...................... > Matrix A; > Vector b,x; > assemble(A,a,mesh); > assemble(b,L,mesh); > solver.solve(A,x,b); > Function up(mesh,x,a); //up=(u,p) velocities and pressure > Function u=up[0]; > Function p=up[1]; > ........................... > supposed to work? > this gives an error: > ---------------------- > conversion from 'dolfin::SubFunction' to non-scalar type 'dolfin::Function' > requested > -------------------- > > On the other hand I know that this works: > Function u(up[0]); > Function p(up[1]);
It's the "explicit" keyword in Function.h that prevents this. Without this, C++ does some magic (like generating assignment operators and similar). We want to prevent this to be able to control what happens during assignment. Another reason is to prevent automatic casting in other cases. See here for example: http://www.sjbrown.co.uk/?article=explicit Martin may have some more comments. -- Anders
signature.asc
Description: Digital signature
_______________________________________________ DOLFIN-dev mailing list [email protected] http://www.fenics.org/mailman/listinfo/dolfin-dev
