substract two random access iterators: how

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
std::vector<T_VolumeChangeMove_NeighboursByVolume> *neighbours;

template <class EnsembleType> inline void VolumeChangeMove<EnsembleType>::
  SetNeighboursByVolume(double Volume)
{
  std::vector<T_VolumeChangeMove_NeighboursByVolume>::iterator *ub;
  T_VolumeChangeMove_NeighboursByVolume key;
  //
  key.Volume=Volume;
  ub=std::upper_bound(neighbours->begin(), neighbours->end(), key,
    [](const T_VolumeChangeMove_NeighboursByVolume &a, const T_VolumeChangeMove_NeighboursByVolume &b)
    {
      return a.Volume<b.Volume;
    });
  if (ub-(neighbours->begin())==0)
    PMC_THROW("Index not found");
  ub--;
  if (i>0)
    FCellList->Neighbours=ub->neighbours; /// last one with own volume <= passed volume
}

returns to

error: no match for ‘operator-’ in ‘ub - ((VolumeChangeMove<EnsembleType>*)this)->VolumeChangeMove<EnsembleType>::neighbours->.std::vector<_T_VolumeChangeMove_NeighboursByVolume>::begin()’


what did i wrong?
ub is not an iterator, it's a pointer to one.
Topic archived. No new replies allowed.