2011-07-10 4 views
11

のための法的な変換を持っていない私は、この奇妙なエラーになってるねえ:のConst不一致:2つのオーバーロードは「この」ポインタ

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

を、私はそれがconstの不一致とは何かを持っていると思いますが、私はどこか分かりません、または理由。 次のコードでは、シェイプとスプライトのベクトルを持っています。ベクターシェイプの1つにアクセスしてその関数の1つを呼び出そうとすると、エラーが発生します。

 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

は、パラメータの後にconstと宣言されます。これは、オブジェクトを変更しないことを意味します。つまり、オブジェクトのメンバ変数のすべてがRenderの定数とみなされます。その状態を変更すると、含まれるオブジェクトが変更されるためです。 Shapesがメンバ変数であり、SetPositionが形状を変更すると(すなわちconstと宣言されていない)、constメンバ関数内で呼び出すことはできません。

したがって、constRenderから削除してください。これは、constでなければならない場合に備えて、ロジックを修正しても問題ありません。

+0

彼はconstを削除できません。彼はおそらくそこにconstを置く基本クラスから派生しています。 –

+0

@Nicol Bolas、あなたはどうやって知っていますか? OPは 'Render'を含むクラスについて何も言わないのですか?もし彼がして、私はそれを逃した、彼はただレンダリングの内容を変更する必要があります。 'const'メンバ関数内でメンバ変数を変更することはできません(あなた自身のコードをハックしてユーザを驚かせたくない場合を除きます)。 – eran

+0

私は彼の最後の投稿を読む。彼はSFMLの描画可能なものを作っています。 –

関連する問題