在 Objective-C 中使用枚举作为外部文件中的参数?
我在文件 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 的代码以进行澄清
I have an enum named RandomEnum in file foo.h:
// foo.h
typedef enum RandomEnum {
ran_1 = 0,
ran_2
} RandomEnum;
In another file, bar.h, I'm trying to use RandomEnum as a parameter type:
// bar.h
#import "foo.h"
@interface bar : NSObject {}
-(RandomEnum)echo:(RandomEnum)ran;
@end
However, the compiler doesn't seem to recognize RandomEnum. Is doing this even possible?
Compiler Error:
error: expected ')' before 'RandomEnum'
Edit: Added code for foo.h for clarification
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
C 构造
enum RandomEnum
没有定义名为RandomEnum
的类型 — 它定义了名为enum RandomEnum
的类型。为了能够只为类型编写RandomEnum
,您需要使用 typedef。The C construct
enum RandomEnum
does not define a type calledRandomEnum
— it defines a type calledenum RandomEnum
. To be able to write justRandomEnum
for the type, you need to use a typedef.事实证明这毕竟是可能的。我的问题与奇怪的交叉包含有关,这些交叉包含不是直接的,但仍然存在。
在给定的示例中,foo.h 包含 thing.h,其中包含 thing.h,后者包含 bar.h。这种交叉依赖最终导致了问题。
不过,还是很高兴了解编译器错误。感谢您的回复!
It turns out this is possible after all. My problem had to do with odd cross-includes that weren't direct, but were still present.
In the given example, foo.h included thing.h which included something.h which included bar.h. This cross dependency is what ended up being the problem.
Still, good to know for compiler bugs. Thanks for the responses!
正如 @Chuck 所说,如果您不想声明
typedef
,那么这样做会起作用:As @Chuck said, it will work if you do this if you don't want to declare a
typedef
: