【问题标题】:no matching function for this function in c++在 C++ 中没有此函数的匹配函数
【发布时间】:2016-11-17 05:27:56
【问题描述】:

我遇到了这个问题。我在这里阅读了其他一些页面,但没有找到解决方案:

这是我的代码:

void Tanque::update(World *world, vector<Fantasma*> *ListaFantasmas){

rot = bearing(rect.x, rect.y, ListaFantasmas->back()->rect.x, ListaFantasmas->back()->rect.y);

bala1-> update(&(ListaFantasmas-> back()));
}

最后一行给了我一个错误。 (调用 bala::update(Fantasma**) 没有 matchig 函数

这是 Bala:update: 的代码

void bala::update(Fantasma *fantasma){

rect.x = rect.x + speed * cos(rot);
rect.y = rect.y + speed * sin(rot);

rot = bearing(rect.x, rect.y, fantasma -> rect.x, fantasma -> rect.y);

}

如您所见,没有什么奇怪的。我在函数中通过引用传递参数,我没有发现任何错误。

您认为错误可能是什么?我该如何解决?

感谢阅读。

【问题讨论】:

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


    【解决方案1】:

    好像在这个电话里

    bala1-> update(&(ListaFantasmas-> back()));
                   ^^^^^^^^^^^^^^^^
    

    成员函数 back 返回一个对 Fantasma * 类型对象的引用,并且您正在应用运算符 & 来获取 Fantasma ** 类型的指针

    也许你应该像调用函数一样

    bala1-> update((ListaFantasmas-> back()));
                   ^^^^^^^^^^^^^^^
    

    【讨论】:

    • @JulianDavidBautistaOsorio 完全没有。不客气。:)
    【解决方案2】:

    问题

    ListaFantasmas 的类型是vector&lt;Fantasma*&gt; *
    所以ListaFantasmas-&gt; back()返回的值的类型是Fantasma*

    线

    bala1-> update(&(ListaFantasmas-> back()));
    

    相当于:

    Fantasma* temp = ListaFantasmas-> back();
    bala1-> update(&temp);
    

    这意味着,您正在尝试将 Fantasma** 传递给参数类型为 Fantasma* 的函数。

    解决方案

    你可以使用:

    bala1-> update(ListaFantasmas-> back());
    

    ` 为了使其更具可读性,您可以使用:

    Fantasma* temp = ListaFantasmas-> back();
    bala1-> update(temp);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      • 2021-09-21
      • 2016-11-23
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多