Help with triangulation::face_iterator

24 views
Skip to first unread message

RAJAT ARORA

unread,
Nov 22, 2016, 1:57:44 PM11/22/16
to deal.II User Group
Hello,


Can we pass Triangulation<dim>::face_iterator by reference ?

I am trying to call the function 

template<int dim>
types
::boundary_id Fdm<dim>::get_face_boundary_id(typename Triangulation<dim>::face_iterator &f_it)
{


}

by using 

typename DofHandler<dim>::cell_iterator cell = dof_handler.begin();

for( face_num = 0; face_num<Geometry_info<dim>::faces_per_cell ; ++face_num)
types
::boundary_id bd = get_face_boundary_id(cell->face(face_num));

This is giving me error

file.h:2945:79: error: no matching function for call to FDM::Fdm<3>::get_face_boundary_id(dealii::TriaIterator<dealii::TriaAccessor<2, 3, 3> >)’
    types
::boundary_id face_boundary_id = get_face_boundary_id(cell->face(face));
                                                                               
^
file.h:2945:79: note: candidate is:
file.h:2892:20: note: dealii::types::boundary_id FDM::Fdm<dim>::get_face_boundary_id(typename dealii::Triangulation<dim, dim>::face_iterator&) [with int dim = 3; dealii::types::boundary_id = unsigned char; typename dealii::Triangulation<dim, dim>::face_iterator = dealii::TriaIterator<dealii::TriaAccessor<2, 3, 3> >]
 types
::boundary_id Fdm<dim>::get_face_boundary_id(typename Triangulation<dim>::face_iterator & f_it)
                   
^
file.h:2892:20: note:   no known conversion for argument 1 from dealii::TriaIterator<dealii::TriaAccessor<2, 3, 3> >’ to dealii::Triangulation<3, 3>::face_iterator& {aka dealii::TriaIterator<dealii::TriaAccessor<2, 3, 3> >&}’
make
[2]: *** [CMakeFiles/fdm.dir/src/main.cc.o] Error 1
make
[1]: *** [CMakeFiles/fdm.dir/all] Error 2
make
: *** [all] Error 2

Passing cell_iterator with reference works though.
Can someone help me what is it that is causing this error ?

Thanks.

Wolfgang Bangerth

unread,
Nov 22, 2016, 7:31:47 PM11/22/16
to dea...@googlegroups.com

Rajat,
I don't know the exact cause of the problem, but...

> Can we pass Triangulation<dim>::face_iterator by reference ?
>
> I am trying to call the function
>
> |
> template<intdim>
> types::boundary_id
> Fdm<dim>::get_face_boundary_id(typenameTriangulation<dim>::face_iterator &f_it)
> {
>
>
> }
> |

...you can probably avoid it if you declare the argument of this function as
'const'.

Best
W.

--
------------------------------------------------------------------------
Wolfgang Bangerth email: bang...@colostate.edu
www: http://www.math.colostate.edu/~bangerth/

RAJAT ARORA

unread,
Nov 27, 2016, 3:48:18 PM11/27/16
to deal.II User Group, bang...@colostate.edu

Thank you Professor.

That worked but I am not sure why a reference didn't work but a const. reference did.

Wolfgang Bangerth

unread,
Nov 27, 2016, 6:35:24 PM11/27/16
to RAJAT ARORA, deal.II User Group
On 11/27/2016 01:48 PM, RAJAT ARORA wrote:
>
> That worked but I am not sure why a reference didn't work but a const.
> reference did.

C++ says that you can convert an argument from one type to another if a
function takes a const-reference, but not if the function takes a non-const
reference. It's a slightly involved situation, but makes perfect sense from a
language design perspective.
Reply all
Reply to author
Forward
0 new messages