← Back to team overview

dolfin team mailing list archive

Re: strange error with swig and forward declaration

 

Hello!

I am not sure about this particular case, but I would suggest putting the 
include statement for IntersectionOperator.h first in dolfin_mesh.h, and try 
remove the forward declaration. 

Remember that SWIG does not follow any #includes in a file, so it is therefore 
you need to either change the order of the include statements in dolfin_foo.h 
or put forward declarations, which _are_ parsed by SWIG.

If it is not possible to change the order in dolfin_foo.h or the type resides 
in an other module, which is imported after foo you might consider add a 
forward declaration in the foo_pre.i as we already have in for example 
function_pre.i

Hope this works,

Johan

> I have a question for the swig experts :) Today I encountered a
> mysterious (at least for me) compile error with IntersectionOperator
> class (yes blame me) in connection with the Mesh class.
> 
> In the Mesh.h  we find:
> 
> [-8<]
> 
> #include "MeshTopology.h"
> #include "MeshGeometry.h"
> #include "MeshData.h"
> #include "IntersectionOperator.h"
> #include "CellType.h"
> 
> namespace dolfin
> {
> 
>    template <class T> class MeshFunction;
>    class Function;
>    class BoundaryMesh;
>    class XMLMesh;
>    class IntersectionOperator;
> 
> [->8]
> 
> with a forward declaration of the IntersectionOperator although its
> header file is included. (This is actually just a debris from the first
> implementation attempt).
> Strangely this seems to be somehow required, if I remove it I obtain the
> error
> 
> mpic++ -o dolfin/swig/cpp_wrap.os -c -Wall -pipe -ansi
> -BOOST_UBLAS_NDEBUG -DDEBUG -g -O2 -Werror -DHAS_MPI=1
> -DMPICH_IGNORE_CXX_SEEK -DPACKAGE_VERSION=\"0.9.6\" -DHAS_CGAL=1
> -DHAS_TRILINOS=1 -DHAS_UMFPACK=1 -DHAS_CHOLMOD=1 -DHAS_PARMETIS=1
> -DHAS_LAPACK=1 -DHAS_SLEPC=1 -DHAS_ZLIB=1 -DHAS_MTL4=1 -DHAS_PETSC=1
> -DHAS_GMP=1 -DHAS_SCOTCH=1 -fno-strict-aliasing -fno-strict-aliasing
> -frounding-math -fPIC -I. -I/home/andre/local/include -I/usr/include
> -I/usr/include -I/usr/include -I/usr/include/libxml2
> -I/home/andre/local/include -I/home/andre/local/include
> -I/usr/include/suitesparse -I/usr/include/suitesparse -I/usr/include
> -I/home/andre/local -I/home/andre/local/include
> -I/home/andre/local/include -I/usr/lib/openmpi/include
> -I/usr/lib/openmpi/lib -I/usr/include
> -I/home/andre/homebase/software/packages/src/fenics-unstable/mtl4
> -I/usr/include -I/home/andre/local/include -I/home/andre/local/include
> -I/usr/lib/openmpi/include -I/usr/lib/openmpi/lib -I/usr/include
> -I/usr/include/scotch -I/usr/include/python2.6 -I/usr/include/python2.6
> -I/home/andre/local/lib/python2.6/site-packages/numpy/core/include
> -I/home/andre/local/include -I/usr/include -I/usr/include -I/usr/include
> -I/usr/include/libxml2 -I/home/andre/local/include
> -I/home/andre/local/include -I/usr/include/suitesparse
> -I/usr/include/suitesparse -I/usr/include -I/home/andre/local
> -I/home/andre/local/include -I/home/andre/local/include
> -I/usr/lib/openmpi/include -I/usr/lib/openmpi/lib -I/usr/include
> -I/home/andre/homebase/software/packages/src/fenics-unstable/mtl4
> -I/usr/include -I/home/andre/local/include -I/home/andre/local/include
> -I/usr/lib/openmpi/include -I/usr/lib/openmpi/lib -I/usr/include
> -I/usr/include/scotch dolfin/swig/cpp_wrap.cc
>   dolfin/swig/cpp_wrap.cc: In function ‘PyObject*
> _wrap_Mesh_intersection_operator__SWIG_0(PyObject*, int, PyObject**)’:
> dolfin/swig/cpp_wrap.cc|45337| error: ‘IntersectionOperator’ was not
> declared in this scope
> dolfin/swig/cpp_wrap.cc|45337| error: ‘result’ was not declared in this
> scope
> dolfin/swig/cpp_wrap.cc|45358| error: expected ‘;’ before ‘const’
> dolfin/swig/cpp_wrap.cc|45359| error: expected primary-expression before
> ‘)’ token
> dolfin/swig/cpp_wrap.cc|45359| error: ‘_result_ref’ was not declared in
> this scope
> 
> || dolfin/swig/cpp_wrap.cc: In function ‘PyObject*
> 
> _wrap_Mesh_intersection_operator__SWIG_1(PyObject*, int, PyObject**)’:
> dolfin/swig/cpp_wrap.cc|45381| error: ‘IntersectionOperator’ was not
> declared in this scope
> dolfin/swig/cpp_wrap.cc|45381| error: ‘result’ was not declared in this
> scope
> dolfin/swig/cpp_wrap.cc|45402| error: ‘_result_ref’ was not declared in
> this scope
> dolfin/swig/cpp_wrap.cc|45403| error: expected primary-expression before
> ‘)’ token
> 
> Has any of swig experts any idea what goes wrong or how I can make the
> IntersectionOperator class without forward declaring it?
> 
> Andre
> 
> 
> 
> _______________________________________________
> Mailing list: https://launchpad.net/~dolfin
> Post to     : dolfin@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~dolfin
> More help   : https://help.launchpad.net/ListHelp
> 



References