c++中没有与此函数匹配的函数

no matching function for this function in c++

本文关键字:函数 c++      更新时间:2023-10-16

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

这是我的代码:

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

这是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返回对类型为Fantasma *的对象的引用,并且应用操作符&到获取类型为Fantasma **的指针

也许你应该像

那样调用这个函数
bala1-> update((ListaFantasmas-> back()));
               ^^^^^^^^^^^^^^^

问题

ListaFantasmas的类型为vector<Fantasma*> *
因此,ListaFantasmas-> back()返回的值类型为Fantasma*

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

等价于:

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

这意味着,你试图将一个Fantasma**传递给一个参数类型为Fantasma*的函数。

<<p> 解决方案/strong>

你可以使用:

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

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

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