gpt4 book ai didi

objective-c - 为什么 Xcode 无法从正确导入的 header 中识别 typedef?

转载 作者:可可西里 更新时间:2023-11-01 03:44:10 26 4
gpt4 key购买 nike

我曾经有一个名为 Constants 的类。里面有这个 typedef:

typedef enum visible_thing {

BACKGROUND,
BACKGROUND_COLOR,
MAIN_WINDOW

} VISIBLE_THING;

我的生活是美好的!我在需要访问此类型的任何地方导入“Constants.h”,并且一切正常。

然后我决定核对 Constants 类。我采用了 typedef 并将其放在另一个类中,为清楚起见,我们将其称为 OtherClass。我经历了并将 Constants.h 的所有导入更改为 OtherClass.h 的导入这就是我所做的,我没有触及任何其他代码。现在整个事情都坏了!

Constants 完美配合的方法现在给我这个错误:Parse Issue - Expected a type。有没有搞错?我当然希望有人对此有一些线索!

更新:令人沮丧的是,这是那些似乎没有解释就自行消失的问题之一。我在下面回答了我自己的问题,我发现一种解决方法需要在一个文件中多次#import-ing 相同的 header 。但是今天我删除了额外的#import,一切仍然有效。精氨酸。电脑!

最佳答案

我得到了同样的“Expected a type”,事实证明这是由导入循环引起的。我用以下简单示例重现了它:

A.h:

#import "B.h"

typedef enum {
SomeEnumA
} SomeEnum;

@interface A : NSObject

@end

B.h:

#import "A.h"

@interface B : NSObject

- (void) func:(SomeEnum)arg;

@end

编译器在编译 A.m(仅导入 A.h)时提示 B.h 中未知的 SomeEnum。发生这种情况是因为 A.h 导入 B.h,B.h 导入 A.h。导入循环不会发生,因此在这种情况下,B.h 不包含定义类型的 A.h 代码。

通过将枚举的定义移动到单独的 SomeEnum.h 可以轻松解决此问题。

关于objective-c - 为什么 Xcode 无法从正确导入的 header 中识别 typedef?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12340904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com