【问题标题】:warning: duplicate protocol definition of '...' is ignored警告:“...”的重复协议定义被忽略
【发布时间】:2011-12-29 15:15:22
【问题描述】:

我应该如何回应这个警告?

警告:“...”的重复协议定义被忽略

我的协议声明在它自己的 .h 文件中,它在我的项目的其他几个文件中被#import。

好吧,以防万一,这是带有协议声明的整个头文件:

#import <Foundation/Foundation.h> 

@class Wrapper;

@protocol WrapperDelegate

@required
- (void)wrapper:(Wrapper *)wrapper didRetrieveData:(NSData *)data;

@optional
- (void)wrapperHasBadCredentials:(Wrapper *)wrapper;
- (void)wrapper:(Wrapper *)wrapper didCreateResourceAtURL:(NSString *)url;
- (void)wrapper:(Wrapper *)wrapper didFailWithError:(NSError *)error;
- (void)wrapper:(Wrapper *)wrapper didReceiveStatusCode:(int)statusCode;

@end

感谢您的建议。

【问题讨论】:

  • 1.你确定你是 #importing 它而不是 #includeing 它是偶然的吗? 2. 你确定(值得一问)你的项目中没有其他东西使用相同的名称(WrapperDelegate)吗?
  • Quixoto 的评论看起来很像一个答案 :) 我也遇到了同样的问题,我错误地使用了#include。 #import 足够聪明,可以避免重复。

标签: objective-c ios xcode xcode4 llvm


【解决方案1】:

检查以确保您的项目中没有两次添加头文件,或者两个不同的文件都实现了该协议。这就是导致出现警告的原因。

【讨论】:

  • 如果我有两个实现相同协议的类会怎样?他们都需要它,那么我该如何解决呢?
  • @zach(或其他任何有同样问题的人)-我遇到了这个问题并发布了一个问题,现在已经回答了here
【解决方案2】:

是的,我遇到了同样的问题。我无法在 Xcode 项目中找到重复的头文件。 但是当我通过 Xcode 中的查找器时,我在项目中找到了协议的 2 头文件。 删除一个解决了这个问题。 谢谢。

【讨论】:

    【解决方案3】:

    只是用我遇到的具体问题来补充这里现有的答案。

    基本上,编译器没有撒谎。它会在有问题的头文件中找到一个以上的类、协议、枚举、定义或任何存在的定义。

    错误可能是您的头文件和头文件搜索路径的组合。

    起初,这些问题似乎令人费解,因为我们知道语句#import 只会导入尚未实现的文件。所以,不像#include,这个问题应该不会发生吧?

    #import 确实有效。但是,如果您的标头设置不正确,那么尽管它可能会遇到具有相同名称的文件,例如MyLibrary.h,如果该文件存在于两个不同的位置它们都在标头搜索路径中,那么 Xcode 会将它们视为两个不同的文件。

    就我而言,我有一个静态库构建阶段,它复制了公共标头。

    依赖产品搜索了上面的文件夹-在构建设置中定义为include/$(TARGET_NAME)-我的项目的源文件夹。

    这意味着包含文件MyLibrary.h 的两个不同文件夹(均位于标头搜索路径中)。该文件中的所有内容都会导致重复或重新定义编译器警告或链接器错误。

    TLDR:同一个文件可能位于两个不同的文件夹中,并且都位于您的标头搜索路径中。检查您的路径,如果您已将静态库合并到项目或工作区中,还请检查公共标头复制到的位置,作为调查的一部分。

    【讨论】:

      【解决方案4】:

      请确认您已经使用过

      #import
      

      而不是

      #include
      

      找出区别here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多