2011-07-10 19 views
11

嘿,我得到這個奇怪的錯誤:常量不匹配:2個重載有this指針沒有法律轉換

error C2663: 'sf::Drawable::SetPosition' : 2 overloads have no legal conversion for 'this' pointer

我認爲這是與常量不匹配,但我不知道在哪裏或者爲什麼。 在下面的代碼中,我有一個形狀和精靈的矢量,當試圖訪問其中一個矢量形狀並調用它的一個函數時,我得到了錯誤。

 std::vector<sf::Shape> Shapes; 
     std::vector<sf::Sprite> Sprites; 

    bool AddShape(sf::Shape& S){ 
     Shapes.push_back(S); return true;}; 
    bool AddSprite(sf::Sprite& S){ 
     Sprites.push_back(S); return true;}; 

private: 

virtual void Render(sf::RenderTarget& target) const {     
    for(unsigned short I; I<Shapes.size(); I++){ 
     Shapes[I].SetPosition(
      Shapes[I].GetPosition().x + GetPosition().x, 
      Shapes[I].GetPosition().y + GetPosition().y); 
     target.Draw(Shapes[I]);} 
    for(unsigned short I; I<Sprites.size(); I++){ 
     target.Draw(Sprites[I]);} 

我該如何解決這個問題?

+0

它發生了什麼? –

+0

爲什麼這個問題有這麼好的分數?對不起,沒有任何意圖,但不是很明顯嗎? – Liviu

回答

14

Render在參數後面聲明爲const。這意味着它不會改變它的對象。這意味着所有對象的成員變量都被認爲是在Render之內的常量,因爲改變它們的狀態意味着改變包含對象。假設Shapes是一個成員變量,並且SetPosition確實更改了形狀(即未聲明爲const),則不能在const成員函數中調用它。

所以,從Render中刪除const,你會沒事的(你修好你的邏輯,以防它必須是const)。

+0

他無法刪除const;他是從一個基本類派生出來的,這個基類可能會把那個const放在那裏。 –

+0

@Nicol Bolas,你怎麼知道? OP沒有對包含'Render'的類進行任何說明,是嗎?如果他這樣做,我錯過了,他只需要改變'Render'的內容。你不能在'const'成員函數內部改變成員變量(除非你想破解你自己的代碼,並讓它的用戶感到驚訝)。 – eran

+0

我讀過他的最後一篇文章;他正在製作一個可繪製的SFML。 –

相關問題