使用enum报错is not a class or namespace的解决方法

今天在给安卓打包的时候出现了这个错误is not a class or namespace,截图如下

屏幕快照 2016-03-24 19.59.16.png

查看cpp文件的相应的一行是这样写的

屏幕快照 2016-03-24 22.04.29.png

这一行是调用了一个enum的,也就是说报的错误是enum的错误,这个在c++中可以识别,但是java就报错

屏幕快照 2016-03-24 22.05.54.png

这个在Xcode上面运行c++语言都是可以通过的,但是java转换的不行。

解决方案就是直接调用enum里面的,类似于我的第一张图片的出错,就是直接用MHero::KCondAwa就行了,不要用MHero::conditionType::KCondAwa。

当然这个说的是因为enum的原因,如果是其他原因导致的,你就需要查查是不是没有引入文件对应的命名空间,比如using namespace std;以及头文件是否引入正确。

类似的原因,我在stackoverflow上面搜到了相似的问题

问题是这样的

头文件

enum MyEnum {
    Something = 0, 
    SomethingElse = 1
};

class MyClass {
    MyEnum enumInstance;
    void Foo();
};

在c++文件

#include "MyCode.h"

void MyClass::Foo() {
    enumInstance = MyEnum::SomethingElse;
}

因为这个MyEnum::SomethingElse并不是标准的C++格式,enumInstance已经是一个MyEnum类型的了,所以直接用MyEnum的值就行了,所以C++文件去掉命名的,直接用值即可

 #include "MyClass.h"

 void Foo() {
     enumInstance = SomethingElse;
 }


参考文章

  1. My enum is not a class or namespace

Last modification:January 1st, 1970 at 08:00 am
如果看了这个文章可以让你少加会班,可以请我喝杯可乐
已打赏名单
微信公众号

Leave a Comment