c ++如何通过引用将迭代器指针传递给期望对象的函数

时间:2014-01-04 08:00:42

标签: c++ pointers iterator pass-by-reference

因此,在我的正文代码中,我创建了一个迭代器来处理指向Point对象的指针列表,我需要能够将该指针传递给set_point_one函数。

list<Point*>::iterator it = on.begin();
l->set_point_one(*it);

set_point_one函数重载如下:

void set_point_one(const double x, const double y, const double z) { one_.set_xyz(x, y, z); }
void set_point_one(Point &p) { one_.set_xyz(p.get_x(), p.get_y(), p.get_z()); } //trying to get it to use this one

当我运行此代码时,我收到错误:

./facet.cc:79:20: error: no matching member function for call to 'set_point_one'
            l->set_point_one(*it);                             //set both end points of the line to the point
            ~~~^~~~~~~~~~~~~
./line.cc:21:10: note: candidate function not viable: no known conversion from 'value_type' (aka 'Point *') to 'Point &' for 1st argument; dereference the argument with
  *
void set_point_one(Point &p) { one_.set_xyz(p.get_x(), p.get_y(), p.get_z()); }
     ^
./line.cc:20:10: note: candidate function not viable: requires 3 arguments, but 1 was provided
void set_point_one(const double x, const double y, const double z) { one_.set_xyz(x, y, z); }         ^

我尝试过一些没有运气的解除引用。有没有明显的东西,我缺少或是我唯一的方法让它进一步重载函数,所以它也明确地采取指向对象的指针?

提前致谢,

最高

2 个答案:

答案 0 :(得分:7)

*it取消引用迭代器,返回对象,它指向。在您的情况下 - Point*

由于您的函数需要Point&,因此您需要再次取消引用它。含义

// not mandatory -v---v
l->set_point_one(*(*it));

答案 1 :(得分:0)

希望以下示例帮助:

using namespace std ;

void test(int* &p)
{
    cout << *p << endl ;
}

int main()
{
    std::list<int*> lp ;
    int *p1,*p2 ;
    p1 = new int(100201)  ;
    p2 = new int(12345)  ;

    lp.push_back(p1) ;
    lp.push_back(p2) ;
    std::list<int*>::iterator it = lp.begin();
    test(*it) ;
}