初始化错误无效

Ami*_*hum 4 c++ iterator

我有一个私有成员的类std::set<Segment*> mSegments和以下方法:

std::pair<iterator, iterator> getSegments() {
    return boost::tie(mSegments.begin(), mSegments.end());
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

std::_Rb_tree_const_iterator<Segment*>&从临时类型 初始化非const类型的引用std::_Rb_tree_const_iterator<Segment*>

我不知道如何解决这个问题.谁能告诉我这是什么问题?

tem*_*def 5

我认为你的问题是你应该在make_pair这里使用而不是tie.关键tie是允许返回元组的函数将返回值一次分配给多个值.例如,如果Get3DPoint返回a tuple<int, int, int>,则可以编写

int x, y, z;
tie(x, y, z) = Get3DPoint();
Run Code Online (Sandbox Code Playgroud)

因此,tie始终通过非const引用接受其参数,以便它们可以变异.在你的情况下,返回值begin()end()是临时对象,所以它们不能绑定到非const引用.

make_pairmake_tuple另一方面,(和)设计用于获取多个值并将它们打包成可以传递的单个pairtuple对象.这是您要在函数中使用的内容.如果您更改要读取的代码

std::pair<iterator, iterator> getSegments() {
    return std::make_pair(mSegments.begin(), mSegments.end());
}
Run Code Online (Sandbox Code Playgroud)

然后你的代码应该编译得很好.

希望这可以帮助!