2016-11-17 62 views
1

我遇到了這個問題。我在這裏讀了一些其他的網頁,但我沒有找到一個解決方案是:在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())); 
} 

最後一行給我一個錯誤。 (呼叫巴拉::更新(fantasma的**)

沒有功能相配套這是巴拉代碼:更新:

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

} 

沒什麼好奇怪的,你可以看到我傳遞參數通過了所有的功能,我看不出有什麼不妥。

你認爲錯誤可能呢?我該如何解決呢?

感謝您的閱讀。

回答

2

看來我n這個電話

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

成員函數back回到Fantasma *類型的對象的引用和你正在申請運營商&它越來越類型的指針Fantasma **

也許你應該調用函數就像

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

感謝您的解釋 –

+0

@JulianDavidBautistaOsorio沒有在所有。不用謝。:) –

0

問題

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