访问命名空间中的枚举

时间:2010-07-07 22:34:15

标签: c++ enums namespaces

在标题中我有这样的设置

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

当然还有另一个与该标头一起使用的cpp文件。然后我有一个包含main()的线程cpp文件。在这个cpp文件中,我使用该枚举传递给方法thing()。

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

当然我从G ++得到其他错误,说BAD没有被声明。有关如何克服此错误的任何帮助?

3 个答案:

答案 0 :(得分:5)

在更正示例代码中的许多小语法错误后,它编译对我来说很好。检查您是否正确拼写了名称。你能以NS :: BAD的身份访问枚举吗?也许你没有包括正确的标题?确保你有 #include "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;
}

自己测试一下: http://codepad.org/Uw0XjOlF

答案 1 :(得分:2)

你能避免使用typedef吗?只是做:

enum Foobar {good, bad, hello};

答案 2 :(得分:0)

它应该工作。它对我有用(Mystagogue的变体也应该起作用)。我知道你有其他一些错误信息吗?

你可能只需要修改标头语法正确,比如在类Thing等的末尾放一个分号。当标题正常时,关于不在命名空间中的BAD的消息也应该消失。 / p>