【问题标题】:Accessing a function from a pointer via -> syntax c++ [duplicate]通过->语法c ++从指针访问函数[重复]
【发布时间】:2019-09-22 14:24:15
【问题描述】:

我在一个类函数中工作:

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;
}

谢谢。

【问题讨论】:

  • 可以显示比较功能吗?如果比较函数的参数类似于 const std::vector& a, const std::vector& b,它应该可以工作。
  • ideone.com/Rw93A8 演示如何使用 sort(pointer_to_open->begin(), pointer_to_open->end(), Compare);
  • 另外,不明白为什么这个问题标记为重复并带有指向潜在答案的链接。 0.0'。手头的问题似乎与函数 () 是否具有比绑定运算符更高的优先级...
  • @Yucel_K 我添加了比较功能,我检查了 URL 的代码,似乎我的仍然无法弄清楚为什么它无法编译。
  • 当您调用比较函数时,向量作为副本传递。相反,它们可以通过引用传递。这样你就不会在每次调用比较函数时都复制向量。所以你获得了速度优势。您所要做的就是更改比较功能。因此; 比较(const vector& a, const vector& b) 它应该可以工作

标签: c++


【解决方案1】:

考虑vector&lt;vector&lt;int&gt;&gt; *pointer_to_open = &amp;openlist;

所以,这里的pointer_to_open 的地址是openlist。所以,如果做*pointer_to_open,它将指向openlist的值,而不是pointer_to_open(因为它有openlist的地址)。

您正在使用:

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);
}

它应该和使用 &amp;openlist 一样好

【讨论】:

  • @Steven Daniel Anderson 这不是答案吗?我以为你说它有效?
  • 我以为是这样,但同样的错误正在发生,我知道它应该可以工作,但它没有:/
  • 错误是什么?相同的?你能用你尝试过的东西来编辑你的问题吗?
  • 当我尝试你的方式 *pointer_to_open->begin() 我得到以下信息:错误:'operator-' 不匹配(操作数类型是 'std::vector' 和 'std ::vector')
  • 但是,在您的情况下,(&amp;openlist)-&gt;begin()((*pointer_to_open)-&gt;begin()) 相同。所以,如果第一个工作正常,那么后者应该工作得很好。
猜你喜欢
  • 2015-04-26
  • 2016-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
  • 2021-02-24
  • 2021-07-11
相关资源
最近更新 更多