2016-08-12 5 views
-3

私は最近捕まってしまった、と私はいくつかのアドバイスを使用することができます。 は理想的には、私がやりたいことは以下の通りです:問題は

  1. ファイル名のベクトルを作成spritebank
  2. に追加するすべてのスプライトを表す列挙を作成し、列挙を使用しては
  3. ベクトルに各ファイル名を追加しますすべてのロードされたファイル名を通過し、列挙型を使用して、特定の特性を有するスプライトを作成

が、第2のステップ(files.emplace()関数)these errorsを与え、第三段階(スイッチ(sprite_file))は異なるERROを与えますrsは、this->sprite_fileまたはsprite_fileを使用した場合に基づいています。どのようにこのアイデアを動作させるためのアイデアですか?

std::vectorstd::mapのように動作しません:私が使用したコードは

//abstracted application class that starts the program// 
std::vector<std::string> files; 

class App : public Event 
{ 
    private: 
     bool Running; //Running flag 

     enum sprite_file 
     { 
      SPRITE_RING1 = 0, 
      SPRITE_RING2 = 1, 
      SPRITE_END = 2 
     }; 

     SDL_Window* graphicsWindow; //The window 
     SDL_Renderer* graphicsRenderer; //The renderer 
     TTF_Font* globalFont; //The global font 

     Timer capTimer; //Frames per second cap timer 

     SpriteBank rings; //Collection of sprites 
     std::string currentSprite; //Filename of sprite in use 
[...] 
//abstracted initialization function within App// 
//Initialize spritebank 
    if(!rings.Init(graphicsRenderer)) 
    { 
     printf("Failed to load sprites!"); 
    } 

    //Add two sprites 
    files.emplace(SPRITE_RING1, "media/img/ring/ring1.png"); 
    files.emplace(SPRITE_RING2, "media/img/ring/ring2.png"); 

    //Add two sprites 
    for(auto filename : files) 
    { 
     switch(this->sprite_file) 
     { 
     case SPRITE_RING1: 
     { 
      rings.AddSprite(filename, 
         40, 
         40, 
         40, 
         20, 
         20); 
      break; 
     } 

     case SPRITE_RING2: 
     { 
      rings.AddSprite(filename, 
         40, 
         40, 
         40, 
         20, 
         20); 
      break; 
     } 
     default: continue; break; 
     } 
    } 

    currentSprite = SPRITE_RING1; 
+3

エラーのスクリーンショットを投稿しないでください。あなたの質問にエラーを貼り付けてください。 – Cornstalks

+1

あなたは 'files.emplace(SPRITE_RING1、" media/img/ring/ring1.png ");'で何をしようとしていますか?基本的に列挙型と文字列リテラルを 'std :: string'のコンストラクタに渡しています。 'std :: string'のコンストラクタがこれら2つの引数と何をすると思いますか? – Cornstalks

答えて

2

(欠落しているすべての情報があるかどう言う気軽に)、以下の二つの明白な問題です。それでも、これらの3つ以上の列挙型要素があるかどうかはわかりません。たぶん、あなたはベクトルの内部構造を使用したいですか?

また、あなたはenumの宣言名を切り替えることはできません。列挙型の値を持つ変数をスイッチに入れてコンパイルできるようにする必要があります。

//example: 
sprite_file myVar = SPRITE_RING1; 
switch (myVar) 
{ 
    //... 
} 

また、列挙型の整数値をstd::stringに割り当てることはできません。

currentSprite = SPRITE_RING1 

最も簡単な方法は、列挙型の別の変数を作成することです。