【问题标题】:How to access c++ enum in C file如何在 C 文件中访问 c​​++ 枚举
【发布时间】:2014-10-30 12:55:48
【问题描述】:

我在这个网站上找不到相同的问题,因此问。我想知道如何从在类中声明的 C 文件访问枚举类型。考虑以下示例:

test1.h

class abc
{
  public:
    enum mode
    {
      ENTER_MODE = 0,
      EXIT_MODE = 1
    };
}

test2.h

abc::mode test_mode();

test2.c

abc::mode test_mode()
{
  if (some_condition)
  {
    return abc::ENTER_MODE;
  }
  else
  {
    return abc::EXIT_MODE;
  }
}

这不会编译。有什么建议吗?

【问题讨论】:

  • 你看到了什么编译错误?你在 test2.h 中包含 test1.h 吗?
  • test2.c 应该是 test2.cpp - 您必须将其编译为 C++,而不是 C。
  • 是的,我包括...编译器正在发出与 test1.cpp 中包含的其他文件相关的警告。这很奇怪

标签: c++ c enums


【解决方案1】:

尽量避免在 C 中使用类。相反,只使用结构(C++ 中的结构支持类的许多特性)。在这个示例代码中(如果我的假设是错误的,请忽略),没有必要将枚举的范围限制在一个类内。

理想情况下,您应该将这些保存为 .cpp 文件并编译为 C++。编译错误说明了什么?

【讨论】:

    【解决方案2】:

    以分号结束类定义并声明为:

    enum abc::mode test_mode();
    

    试试这个(这个编译)ok:

    class abc
    {
      public:
        enum mode
        {
          ENTER_MODE = 0,
          EXIT_MODE = 1
        };
    };
    
    enum abc::mode test_mode()
    {
        bool some_condition=false; // or something
      if (some_condition)
      {
        return abc::ENTER_MODE;
      }
      return abc::EXIT_MODE;
    }
    

    【讨论】:

    • @JensGustedt 但是使用了类,你的意思是 C 吗?
    • 同意@PaulR 文件名应该是.cpp,而不是.c
    猜你喜欢
    • 2013-12-04
    • 2018-01-22
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 2020-12-14
    相关资源
    最近更新 更多