2016-07-30 11 views
-1

現在、私のコードに問題があります。私はすべてを試みた。 image is here 誰かが私を助けてくれることを願っています:)。 Btw私はC++に新しいですマップからすべてのスプライトを返すC++ SFML

+0

あなたは私に間違っていることを教えてもらえますか?[これ](http://stackoverflow.com/questions/110157/how-to-retrieve-all-keys-or-values-from-a-stdmap)見てください。 – pie3636

+0

私のコードで? –

+0

マップ内のスプライトの比較関数であるsprites.comp_valueを反復していますが、この文脈では意味をなさないものです。私は試してみることをお勧めします: 'for(auto sprite:sprites)'はキーを反復処理します。 'sprite.second'を使って値にアクセスすることができます。これは、STLマップコンテナを使用していることを前提としています。 – pie3636

答えて

0
#include <SFML\Graphics.hpp> 

std::map<std::string, sf::Sprite> sprites; 

void addSprite(std::string sprite_name, sf::Texture sprite_texture) { 

    sf::Sprite sprite; 

    sprite.setTexture(sprite_texture); 

    sprites[sprite_name] = sprite; 

} 

sf::Sprite getSprite(std::string sprite_name) { 

    return sprites[sprite_name]; 
} 

std::vector<sf::Sprite> getSprites() { 

    std::vector<sf::Sprite> sprites_c2; 

    for each (sf::Sprite sprite in sprites.value_comp) { 

     sprites_c2.emplace_back(sprite); 

    } 

    return sprites_c2; 
} 
+0

次回は元の投稿を編集したい場合があります。このセクションはあなたの質問に答えようとしている人のためのものです。 – pie3636

0

for eachは有効ではありません。 C++ 11で始まる、正しい式はここで for (<type> <variable> : <collection>)

で、あなたも関数であり、ここでは意味を成さない、sprites.value_compて要素のコレクションにアクセスしようとしています。

std::setコンテナがspritesをされると仮定すると、あなたはそれの上にこのよう反復することができます:あなたが代わりにstd::mapを使用している場合は、

for (auto sprite : sprites) { 
    // sprite is the value you're looking for 
} 

を同じループを使用しますが、spriteがあなたのsf::Spriteが、そのキーは含まれません、スプライトにアクセスするにはsprite.secondを使用する必要があります。

autoキーワードを使用すると、コンパイラは変数の型を判別できます。あなただけの変換しようとしている場合は

// Replace "keyType" with the type of the keys, such as int or std::string 
std::map<keyType, sf::Sprite>::iterator it; for (it = sprites.begin(); it != sprites.end(); ++it) 
{ 
    // Access each sprite using it->second 
} 

std::map

std::set<sf::Sprite>::iterator it; 
for (it = sprites.begin(); it != sprites.end(); ++it) 
{ 
    // Access each sprite using *it (the star is necessary here) 
} 

:あなたのコンパイラがC++ 11をサポートしていない場合は

、あなたの代わりにこのような何かをする必要があります。あなたのstd::setstd::vectorに変換することができますが、簡単な方法があります:

std::mapの場合、単一行バージョンはありませんので、上記のようにループを繰り返す必要があります。

+0

ありがとうございます。 –

+0

'std :: set'を' std :: vector'に変換しようとしていると仮定すれば、もっと簡単な方法があります:空のベクトルを作成し、 'std :: copy(sprites.begin ()、sprites.end()、std :: back_inserter(sprites_c2)); ' – pie3636

関連する問題