Я думаю, что ваша проблема в том, что вы, вероятно, должны использовать make_pair
здесь вместо tie
.Смысл tie
состоит в том, чтобы позволить функциям, которые возвращают кортежи, возвращать возвращаемое значение нескольким значениям одновременно.Например, если Get3DPoint
возвращает tuple<int, int, int>
, вы можете написать
int x, y, z;
tie(x, y, z) = Get3DPoint();
. Из-за этого tie
всегда принимает свои параметры не по ссылке const
, чтобы их можно было изменить,В вашем случае возвращаемые значения begin()
и end()
являются временными, поэтому они не могут быть привязаны к ссылкам, отличным от const
.
make_pair
(и make_tuple
), вс другой стороны, они рассчитаны на несколько значений и упаковывают их в один объект pair
или tuple
, который можно передавать.Это то, что вы хотите использовать в своей функции.Если вы измените код на
std::pair<iterator, iterator> getSegments() {
return std::make_pair(mSegments.begin(), mSegments.end());
}
, тогда ваш код должен хорошо скомпилироваться.
Надеюсь, это поможет!