使用枚举添加到矢量的问题

时间:2016-08-12 04:01:01

标签: c++ c++11 vector enums

我最近在制作C ++ 11 / SDL游戏引擎时遇到困难,我可以使用一些建议。 理想情况下,我想要做的是:

  1. 创建表示要添加到spritebank的所有精灵的枚举
  2. 创建一个文件名向量,并使用枚举将每个文件名添加到向量
  3. 浏览所有加载的文件名,并使用枚举创建具有特定属性的精灵
  4. 但第二步(files.emplace()函数)给出these errors,第三步(switch(sprite_file))根据我使用this->sprite_file或{{3}给出不同的错误}。关于如何使这个想法发挥作用的任何想法?我使用的代码如下(如果有任何信息遗失,请随时说出来)

    //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;
    

1 个答案:

答案 0 :(得分:2)

两个明显的问题:

std::vector不像std::map那样有效。即便如此,我还不确定你是否拥有超过这3个枚举元素。也许你想在矢量中使用一个结构?

此外,您无法切换enum的声明名称。您必须切换具有枚举值的变量才能进入开关,并且能够进行编译。

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

此外,您无法将枚举的整数值指定给std::string

currentSprite = SPRITE_RING1

最简单的方法是创建枚举类型的另一个变量。