我有一个私有成员的类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*>
我不知道如何解决这个问题.谁能告诉我这是什么问题?
我认为你的问题是你应该在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另一方面,(和)设计用于获取多个值并将它们打包成可以传递的单个pair或tuple对象.这是您要在函数中使用的内容.如果您更改要读取的代码
std::pair<iterator, iterator> getSegments() {
return std::make_pair(mSegments.begin(), mSegments.end());
}
Run Code Online (Sandbox Code Playgroud)
然后你的代码应该编译得很好.
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
580 次 |
| 最近记录: |