возвращая Boost iterator_range из функции-члена - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь создать функцию-член, которая возвращает диапазон массива, как показано ниже:

#include <boost/range/iterator_range.hpp>

class MyClass {
public:
    boost::iterator_range< double* > range() const{ 
    boost::iterator_range< double* > itr_range = boost::make_iterator_range< double* >(&container[0], &container[m_size]);
    return itr_range;
 }
private:
    double container[4] {0.0, 1.0, 2.0, 3.0}; 
    size_t m_size = 4;
};

int main() {
   MyClass obj;   

   return 0;
}

Но выдает следующие ошибки:

no matching function for call to 'make_iterator_range(const double*, const double*)' main.cpp line 6

'double*' is not a class, struct, or union type range_test      line 37, external location: /usr/include/boost/range/const_iterator.hpp 

'double*' is not a class, struct, or union type range_test      line 37, external location: /usr/include/boost/range/mutable_iterator.hpp   

required by substitution of 'template<class Range> boost::iterator_range<typename boost::range_iterator<C>::type> boost::make_iterator_range(Range&, typename boost::range_difference<Left>::type, typename boost::range_difference<Left>::type) [with Range = double*]'    range_test      line 616, external location: /usr/include/boost/range/iterator_range.hpp


 required by substitution of 'template<class Range> boost::iterator_range<typename boost::range_iterator<const T>::type> boost::make_iterator_range(const Range&, typename boost::range_difference<Left>::type, typename boost::range_difference<Left>::type) [with Range = double*]'   range_test      line 626, external location: /usr/include/boost/range/iterator_range.hpp    

В чем может быть проблемаВот?Заранее спасибо за помощь?

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Это сработало, когда я изменил его, как показано ниже:

boost::iterator_range<const double*> range() const{ 
    return boost::make_iterator_range(&container[0], &container[m_size]);
}
0 голосов
/ 02 февраля 2019

constness является проблемой.

Ваш range метод * const.

Каков тип &container[0] внутри const метода?Это const double*.Он не соответствует

boost::make_iterator_range< double* >
                            ^^^^^^^^

Поэтому определите range функцию-член как неконстантную или используйте boost::make_iterator_range< const double*>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...