2014-09-05 83 views
0

我傳遞使用SFML吸氣功能像一個參考參數傳遞一個引用參數時:意外行爲使用getter函數

ball.update(時間,pad_player.getGlobalBounds(),pad_ia.getGlobalBounds(),得分);

,但出現這樣的問題:

Pong.cpp: In member function ‘void Pong::run()’: 
Pong.cpp:30:82: error: no matching function for call to ‘Ball::update(sf::Time&, sf::FloatRect, sf::FloatRect, Score&)’ 
    ball.update(time, pad_player.getGlobalBounds(), pad_ia.getGlobalBounds(), score); 
                       ^
Pong.cpp:30:82: note: candidate is: 
In file included from Pong.hpp:5:0, 
       from Pong.cpp:2: 
Ball.hpp:10:7: note: void Ball::update(sf::Time&, sf::FloatRect&, sf::FloatRect&, Score&) 
    void update(sf::Time& delta, sf::FloatRect& p1, sf::FloatRect& p2, Score& score); 
    ^
Ball.hpp:10:7: note: no known conversion for argument 2 from ‘sf::FloatRect {aka sf::Rect<float>}’ to ‘sf::FloatRect& {aka sf::Rect<float>&} 

所以如果我改變了這一點:

sf::FloatRect player = pad_player.getGlobalBounds(); 
    sf::FloatRect ia = pad_ia.getGlobalBounds(); 
    ball.update(time, player, ia, score); 

程序運行正常。

爲什麼?

+0

我想我們需要更多的細節! – Carles 2014-09-05 12:12:59

回答

0

您與呼叫:

ball.update(time, 
      pad_player.getGlobalBounds(), 
      pad_ia.getGlobalBounds(), 
      score); 

被解釋爲

Ball::update(sf::Time&, sf::FloatRect, sf::FloatRect, Score&) 

有一個與你的聲明有所不同:

void Ball::update(sf::Time&, sf::FloatRect&, sf::FloatRect&, Score&) 
             ^   ^
//         expecting references here 

事實上,你的第二個和第三個參數是從返回值函數,它只能綁定到左值參數,const rvalue引用參數給r值參考參數(標記爲&&)。

在這種情況下,最簡單的解決方法是更改​​爲const引用而不是僅引用,以便它可以用於臨時AND變量。

void Ball::update(sf::Time&, const sf::FloatRect&, const sf::FloatRect&, Score&); 
1

錯誤消息顯示Ball::update正在等待參數2和3的nonconst FloatRect引用。臨時返回值不能綁定到標準兼容編譯器中的nonconst引用,所以錯誤非常正確。

如果您可以選擇將Ball::update更改爲const FloatRect&,那麼您應該可以執行所嘗試的操作。