Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 访问命名空间中的枚举_C++_Enums_Namespaces - Fatal编程技术网

C++ 访问命名空间中的枚举

C++ 访问命名空间中的枚举,c++,enums,namespaces,C++,Enums,Namespaces,在标题中,我有这样的设置 namespace NS { typedef enum { GOOD, BAD, UGLY }enum_thing; class Thing { void thing(enum_thing elem); } } 当然,还有另一个cpp文件,与该头一起使用。然后我有一个包含main的线程cpp文件。在这个cpp文件中,我使用该枚举传递给方法 using namespace NS; int main() { Thing t(

在标题中,我有这样的设置

namespace NS {
    typedef enum { GOOD, BAD, UGLY }enum_thing;
    class Thing {
        void thing(enum_thing elem);
    }
}
当然,还有另一个cpp文件,与该头一起使用。然后我有一个包含main的线程cpp文件。在这个cpp文件中,我使用该枚举传递给方法

using namespace NS;
int main() {
    Thing t();
    t.thing(BAD);
}

当然,我从G++中得到了其他错误,说没有声明BAD。关于如何克服这个错误有什么帮助吗?

您能避免使用typedef吗?只要做:

enum Foobar {good, bad, hello};

在纠正了示例代码中的许多小语法错误之后,它对我来说编译得很好。检查你的名字拼写是否正确。能否以NS::BAD的身份访问枚举?也许您没有包含正确的标题?确保你有 在顶部包括FileWithEnum.h

namespace NS {
    typedef enum { GOOD, BAD, UGLY }enum_thing;
    class Thing {
        public:
            void thing(enum_thing elem){}
    };
}


using namespace NS;
int main() {
    Thing t;
    t.thing(BAD);
    return 0;
}
自己测试一下:
它应该能工作。对我来说,Mystagogue的变体也应该起作用。我知道你还有其他错误消息


您可能只需要将标题修改为语法正确,比如在类的末尾放一个分号,等等。当标题正常时,关于不在名称空间中的坏消息也应该消失。

它应该是t;不事ta公:前缺的是方法和一个;在类声明结尾处,在关闭}之后缺少。如果完全限定枚举,该怎么办:NS::BAD。老编译器不喜欢这个。在这种情况下,不需要用C++来打字。这里一个匿名枚举被定义为typedef'ed。