【问题标题】:How to tell Borland C++ that an enum is inside a class?如何告诉 Borland C++ 一个枚举在一个类中?
【发布时间】:2014-01-21 07:20:29
【问题描述】:

我的一项任务要求我的代码在 Borland Turbo C++ 上编译时没有错误。问题是,我有一个名为 OAConfiguration 的类,其中包含一个枚举:

enum HBLOCK_TYPE{hbNone, hbBasic, hbExtended, hbExternal};

在我的代码中,我为 ObjectAllocator 类实现了函数 AllocateBlock 函数,其中我有这样的语句:

if (OAConfig::HBLOCK_TYPE::hbExternal)

虽然这在 VS 中运行良好,但 Borland 说“不是 ObjectAllocator::AllocateBlock(void *) 中的类或命名空间名称”

谁能指出正确的语法,我在其他地方找不到类似的问题。

【问题讨论】:

    标签: c++ enums namespaces turbo-c++ borland-c++


    【解决方案1】:

    Borland 在这方面是正确的:您不能通过枚举名称来限定枚举数。 Visual Studio 仅支持将其作为扩展。正确的代码应该是这样的:

    if (OAConfig::hbExternal)
    

    在 C++11 中,新类型 enum class 被添加到语言中。这提供了范围访问(并且仅限范围访问),同时也不支持使用 int 进行隐式转换。

    【讨论】:

    • 成功了,非常感谢。所以 C++11 消除了旧的枚举还是只添加了新的枚举?用于索引向量的枚举有助于使代码更易于阅读,并使跳转表调用更清晰。
    • @user3218083 当然,旧的enums 仍然是语言的一部分,我敢说他们永远都会。这就是新的关键字组合引入新的作用域枚举的原因。
    • "Visual Studio 仅支持它作为扩展。" - 不幸的是,他们不喜欢默认打开它。
    • @TonyD AFAIK,所有 VS 扩展默认开启。
    猜你喜欢
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 2022-11-14
    • 2010-12-22
    • 2016-11-30
    • 2012-07-17
    • 1970-01-01
    相关资源
    最近更新 更多