通过->语法C ++从指针访问函数

时间:2019-05-04 06:06:30

标签: c++

我正在使用类函数:

void Planner::CellSort()
{
    vector<vector<int>> *pointer_to_open = &openlist;
    sort(pointer_to_open->begin(), pointer_to_open->end(), Compare);
}

当我尝试编译它时,出现以下错误:

error: must use '.*' or '->*' to call pointer-to-member function

但是当我尝试以下编译时就可以了:

sort((&openlist)->begin(), (&openlist)->end(), Compare);

实际上不是在做同样的事情吗?或这两种方法有什么区别?

这是我的比较功能:

bool Planner::Compare(const vector<int> a, const vector<int> b)
{
    int f1 = a[2] + a[3]; // f1 = g1 + h1
    int f2 = b[2] + b[3]; // f2 = g2 + h2
    return f1 > f2;
}

谢谢。

1 个答案:

答案 0 :(得分:1)

考虑vector<vector<int>> *pointer_to_open = &openlist;

因此,这里的pointer_to_open的地址为openlist。因此,如果执行*pointer_to_open,它将指向openlist的值,而不是pointer_to_open的值(因为它具有开放列表的地址)。

您正在使用:

pointer_to_open而不是*pointer_to_open

考虑有关指针和向量的thisthis文章。

您可以做什么:

void Planner::CellSort()
{
    vector<vector<int>> *pointer_to_open = &openlist;
    sort(*pointer_to_open->begin(), *pointer_to_open->end(), Compare);
}

它应该和使用&openlist

一样好