【问题标题】:Using enums as parameters in an external file in Objective-C?在Objective-C的外部文件中使用枚举作为参数?
【发布时间】:2010-12-30 22:29:13
【问题描述】:

我在文件 foo.h 中有一个名为 RandomEnum 的枚举:

// foo.h
typedef enum RandomEnum {
  ran_1 = 0,
  ran_2
} RandomEnum;

在另一个文件 bar.h 中,我尝试使用 RandomEnum 作为参数类型:

// bar.h
#import "foo.h"

@interface bar : NSObject {}
  -(RandomEnum)echo:(RandomEnum)ran;
@end

但是,编译器似乎无法识别 RandomEnum。这样做有可能吗?

编译器错误:

error: expected ')' before 'RandomEnum'

编辑:为 foo.h 添加代码以进行澄清

【问题讨论】:

  • 该代码是直接从显示问题的某个来源复制和粘贴的吗?因为我刚刚编译了你的代码,它运行良好。
  • 您的代码在我的 Mac (10.6) 上编译得很好。你#import <Foundation/Foundation.h> 让 NSObject 进入作用域了吗?

标签: objective-c enums


【解决方案1】:

正如@Chuck 所说,如果您不想声明typedef,则这样做会起作用:

-(RandomEnum)echo:(enum RandomEnum)ran;

【讨论】:

    【解决方案2】:

    事实证明这是可能的。我的问题与不直接但仍然存在的奇怪交叉包含有关。

    在给定的示例中,foo.h 包含了 thing.h,其中包含了 something.h,其中包含了 bar.h。这种交叉依赖最终成为了问题。

    不过,很高兴知道编译器错误。感谢您的回复!

    【讨论】:

      【解决方案3】:

      C 构造 enum RandomEnum 没有定义一个名为 RandomEnum 的类型——它定义了一个名为 enum RandomEnum 的类型。为了能够只为该类型编写 RandomEnum,您需要使用 typedef。

      【讨论】:

      • 感谢您的回答。我应该澄清一下我在 foo.h 中使用了 typedef
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 2010-12-10
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多