【问题标题】:Issue nesting enum within a struct在结构中发出嵌套枚举
【发布时间】:2021-08-16 18:43:38
【问题描述】:

我正在尝试将我的一些枚举嵌套在结构中,以便我可以在涉及其他结构变量的函数中使用它们。我在新代码for循环中不断收到错误:

名称后跟 :: 必须是类或命名空间

但是,在不使用类或命名空间的旧代码 for 循环中,这不是问题。

为什么新代码会抛出这个错误?如何在不将结构转换为类的情况下修复它?

旧代码.h

const int LONGBUTTON_HEIGHT = 128;
const int LONGBUTTON_WIDTH = 256;

enum CreateForestButtonState { CREATE_DEFAULT, CREATE_HOVER, CREATE_INACTIVE, CREATE_PRESSED, CREATE_TOTAL };

旧代码.cpp

#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include "oldcode.h"

SDL_Rect create_clips[CreateForestButtonState::CREATE_TOTAL];
for (int i = 0; i < CreateForestButtonState::CREATE_TOTAL; i++)
{
    create_clips[i].x = i * LONGBUTTON_WIDTH;
    create_clips[i].y = 0;
    create_clips[i].w = LONGBUTTON_WIDTH;
    create_clips[i].h = LONGBUTTON_HEIGHT;
}
int useCreate_Clip = CREATE_DEFAULT;

newcode.h

const int LONGBUTTON_HEIGHT = 128;
const int LONGBUTTON_WIDTH = 256;

struct Graphic
{
    enum state {DEFAULT, HOVER, INACTIVE, PRESSED, TOTAL};
    int use_clip;
    int x;
    int y;
    int h;
    int w;
};

newcode.cpp

#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include "newcode.h"

Graphic create_plain;
create_plain.type = "long button";
create_plain.state::DEFAULT;
create_plain.use_clip;

SDL_Rect clips[create_plain.state::TOTAL];
for (int i = 0; i < create_plain.state::TOTAL; i++)
{
    clips[i].x = i * LONGBUTTON_WIDTH;
    clips[i].y = 0;
    clips[i].w = LONGBUTTON_WIDTH;
    clips[i].h = LONGBUTTON_HEIGHT;
}
create_plain.use_clip = create_plain.DEFAULT;

【问题讨论】:

  • create_plain.state::TOTAL -> Graphic::state::TOTAL

标签: c++ for-loop struct enums


【解决方案1】:

不要命名枚举:

struct Graphic
{
    enum {DEFAULT, HOVER, INACTIVE, PRESSED, TOTAL};
    int use_clip;
    int x;
    int y;
    int h;
    int w;
};

SDL_Rect clips[Graphic::TOTAL];

【讨论】:

  • SDL_Rect 部分使用结构成员 create_plain 可以正常工作。错误发生在 for 循环中: for (int i = 0; i
【解决方案2】:

使用

for (int i = 0; i &lt; Graphic::state::TOTAL; i++)

您应该使用范围,而不是对象。

【讨论】:

    【解决方案3】:

    这种安排有效。我不知道为什么。

    for (int i = 0; i < create_plain.TOTAL; i++)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-07
      相关资源
      最近更新 更多