【问题标题】:Getting an "enum is not a class or namespace" error - C++ [duplicate]获取“枚举不是类或命名空间”错误 - C++ [重复]
【发布时间】:2015-10-28 23:23:09
【问题描述】:

我在头文件中声明了一个枚举(称为Direction):

enum Direction {LEFT, RIGHT};

然后,我有一个构造函数,它接受一个方向值并将其设置为另一个方向变量 (stringDirection)。

bool InformationWidget::move(Direction direction){
    stringDirection=direction;

return true;
}

最后,我有一个 if 语句来检查它的值:

if (stringDirection == Direction::RIGHT)

这是我得到错误的地方,在那个 if 语句..有什么想法吗? 我尝试查看以前的线程,但没有发现任何有用的东西。

谢谢!

编辑:

这是我的文件:

小部件.h

enum class Direction {LEFT, RIGHT};

class Widget {
public:
     virtual bool...
     ...
};

信息.h

class InformationWidget: public Widget {
public:
    ...
    Direction stringDirection;
    ...
};

信息.cpp

void InformationWidget::show(){

...

if (stringDirection == LEFT) {
... }
}

【问题讨论】:

    标签: c++ enums


    【解决方案1】:

    如果你想要一个作用域枚举,则将你的枚举声明为enum classenum struct,即要求枚举器前缀为Direction::

    enum class Direction {LEFT, RIGHT};
    

    否则,如果您想要一个旧的 C 样式枚举,那么您需要省略错误消息所抱怨的命名空间限定符 Direction::

    if (stringDirection == RIGHT)
    

    请注意,在后一种情况下,枚举器标识符将被放置在全局命名空间中,这可能会导致它们与其他标识符发生冲突。

    【讨论】:

    • 感谢您的回复!我知道这些解决方案,但它们都不起作用。当我尝试第一个(添加“类”)时,它仍然给我同样的错误。当我尝试第二个时,它只给出了 if 语句的 RIGHT 部分的错误,说“符号 'RIGHT' 无法解析”。
    • 那你在其他地方做错了,需要提供MCVE
    • 我真的不知道这里有什么问题..我在头文件中声明了枚举,将它包含在一个 .cpp 文件中(如果重要,它实现了来自纯抽象基类的方法)和它只是不工作..
    • 抱歉,如果没有可重现的示例,我们将无能为力。 (猜测除外)
    • 从你添加的sn-ps来看,你没有包含标题,也没有在枚举数前面指定作用域枚举的名称。
    猜你喜欢
    • 1970-01-01
    • 2016-03-27
    • 2014-07-24
    • 2011-07-08
    • 2016-04-20
    • 2023-03-30
    • 2014-04-09
    • 2016-06-22
    相关资源
    最近更新 更多