【问题标题】:Accessing an enum in a namespace访问命名空间中的枚举
【发布时间】:2010-07-07 22:34:14
【问题描述】:

在标题中我有这样的设置

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 没有被声明。有关如何克服此错误的任何帮助?

【问题讨论】:

  • 应该是Thing t; 而不是Thing t()
  • 在方法之前缺少public:,在类声明的末尾缺少;,在关闭}之后。
  • 如果你完全限定枚举怎么办:NS::BAD。较旧的编译器不喜欢这个。在这种情况下,不需要 C++ 中的类型定义。这里一个匿名枚举被 typedef 了。

标签: c++ enums namespaces


【解决方案1】:

在纠正了示例代码中的许多小语法错误后,它对我来说编译得很好。检查您是否正确拼写了这些名称。你能以 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

【讨论】:

    【解决方案2】:

    你能避免使用 typedef 吗?做吧:

    enum Foobar {good, bad, hello};
    

    【讨论】:

      【解决方案3】:

      它应该工作。它对我有用(Mystaggue 的变体也应该有效)。我知道您还有其他一些错误消息?

      您可能只需要修复标题以使其在语法上正确,例如在类 Thing 的末尾放置一个分号等。当标题正常时,关于 BAD 不在命名空间中的消息也应该消失。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-28
        • 2012-10-18
        • 1970-01-01
        • 2016-06-20
        • 1970-01-01
        相关资源
        最近更新 更多