【问题标题】:enum type needed on multiple class header files多个类头文件所需的枚举类型
【发布时间】:2014-03-16 09:08:36
【问题描述】:

我正在尝试制作一个使用多个类(和多个头文件)的 C++ 程序。我在其中一个类中创建了一个名为“move”的枚举类型,但我需要从所有类中访问这种类型。如果我只将枚举声明留在一个头文件中,则其他类无法访问它,编译器会在除该类和 main 之外的所有使用它的地方给出错误。如果我在 main 中声明它,则没有类可以访问它。如果我在每个类头文件中声明它,我会在重新定义它时遇到编译器错误。

我在哪里声明一个枚举类型,以便每个类头文件都可以访问它?

【问题讨论】:

  • 绝对没有规则说在 C++ 中每个标题都有一个类(或每个类都有一个标题)。在小型程序中(例如,不到一万行),我建议整个程序只使用一个通用头文件!
  • 在带有其他常见声明的标题中。如果它必须在一个类中声明并且所有其他类都依赖于它,请重新审视您的设计,因为它耦合得太紧了。
  • 我同意使用一个文件而不是多个小文件更容易,但这是一项任务,他们要求我们使用多个文件。

标签: c++ class enums header enumeration


【解决方案1】:

我在哪里声明一个枚举类型,以便每个类头文件都可以访问它?

在它自己的标题中。为您的enum#include 在所有其他需要使用它的头文件中创建一个单独的头文件。不要忘记添加include guards 以避免多次包含:

#ifndef MOVE_H
#define MOVE_H

enum move foo {
    LEFT, RIGHT, UP, DOWN
};

#endif /* MOVE_H */

注意:如果您有多个逻辑上属于一起的枚举,或者有一个与类一起属于的enum,您可能希望将两者放在同一个标​​题中。

【讨论】:

  • 我不同意。拥有数百个小型 C++ 头文件是一场噩梦。
  • @BasileStarynkevitch 我有没有提到数百个小标题?此外,如果像 OP 所建议的那样,在任何地方都使用enum,那么这在逻辑上是可行的。
  • 不,他的整个(可能很小的)应用程序只能有一个头文件!每种类型(即枚举或类)都有一个标头实在是太过分了!
  • @BasileStarynkevitch 如果应用程序很小,那么它将有很少的枚举。如果他的枚举在逻辑上相互连接,那么将它们放在同一个标​​题中就可以了。如果它们没有相互连接,那么单独的文件就是要走的路。此外,现代 IDE 已经大大简化了对多个头文件的管理,因此推动程序员减少头文件数量的主要动机之一现在已经不复存在了。
  • 我最终把它放在了一个单独的文件中。让我感到困惑的是我的大学导师向我指出的事情。当使用#include 时,链接器只能链接一次,直到它必须重新#included,如果这有意义的话。
猜你喜欢
  • 1970-01-01
  • 2015-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多