gpt4 book ai didi

objective-c - 类 'Resources.h' 的重复接口(interface)定义

转载 作者:行者123 更新时间:2023-12-04 15:14:34 26 4
gpt4 key购买 nike

由于安全原因无法粘贴原始代码因此尝试更加完整

  1. 有一个名为 Utils.xcodeproj 的项目,它有一个名为 Resources.m 的 objective-c 文件,其 header 公开为公共(public) header 。
  2. 有另一个名为 main.xcodeproj 的项目,其中引用了这个 Utils 项目。

现在编译 main.xcodeproj 时出现错误“类资源的重复接口(interface)定义”iOS/Utils/Utils/Resources.h:23:1: @interface Resources : NSObject

Build/Products/Debug-iphoneos/include/Utils/Resources.h:23:12: 注意:之前的定义在这里 @interface Resources : NSObject

有没有办法克服这个错误或将这个错误变成警告?

Class Resources.h

@protocol ResourcesDelegate;

@interface Resources : NSObject

@property (weak, nonatomic) id<ResourcesDelegate> delegate;
+ (void) setDefault:(UIView *)view;
@end


@protocol ResourcesDelegate <NSObject>
@required
- (void)loadFromSDK:(NSString*)Name;

@end



Class Utils-Bridging-Header.h
#import "Resources.h"

Class XYZ in main.xcodeproj
#import "Utils/Resources.h"

[Resources setDefault:view]

最佳答案

你也可以..

#ifndef Resources_h
#define Resources_h

// ... your #import or @import, #include <...> rules here...

// ... announcing a
// @class SomeClassWithName
// here if needed. This will make SomeClassWithName available
// to this header even if its interface is declared later on. (skaak's solution)

// ... all your @interface stuff here ...

#endif

这应该可以避免每个项目实现两次。

为什么会这样?
因为一旦 #import "Resources.h" 完成 Resources_h 将被定义,当 #import "Utils/Resources.h" 被处理时,定义将跳过第二次尝试声明类。

编辑忘了提这种方法当然应该用在头文件中。虽然不禁止在实现文件中使用它。事实上,在跨平台源代码中,您会看到它被大量使用。

编辑2看看下面很好的解释答案当使用 #include 时发生了什么,以及当使用 #import sven's stackoverflow answer 时意味着什么可以正常工作

  • 因此 #import 预处理器命令提醒已经导入的文件,但是当文件及其声明从另一个项目重新建立时,这似乎失败了有自己的文件夹结构。简而言之:"Resources.h""Utils/Resources.h" 是预处理器的不同文件,因此您的类定义彼此重复。

关于objective-c - 类 'Resources.h' 的重复接口(interface)定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64555793/

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