在 C++ 中没有此函数的匹配函数

no matching function for this function in c++

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

这是我的代码:

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

}

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

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

感谢阅读。

好像在这个调用

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

成员函数 back returns 对类型 Fantasma * 对象的引用,并且您正在对其应用运算符 & 以获取类型 Fantasma **[=15 的指针=]

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

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

问题

ListaFantasmas的类型是vector<Fantasma*> *
因此,ListaFantasmas-> 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);