【问题标题】:Duplicate interface declaration for class 'Foo'类“Foo”的重复接口声明
【发布时间】:2011-04-24 03:21:47
【问题描述】:

我正在编写我的程序,但设置中的某些内容似乎发生了变化。突然我有错误“类'Foo'的重复接口声明”。它提到了一个头文件被复制但只有一个副本。

有趣的是,这只发生在调试模式下,而不是设备模式下。

有谁知道可能出了什么问题?

我正在使用 Objective-C++ 和一些静态库。

【问题讨论】:

  • 当您说“调试模式,而不是设备模式”时,您是指为模拟器构建还是为设备构建,还是指使用调试配置而不是发布配置进行构建?
  • 我遇到了类似的问题。它已通过 Clean and build 解决

标签: iphone objective-c cocoa-touch xcode objective-c++


【解决方案1】:

这个错误是因为给不同的对象赋予了相同的变量名。这是 Xcode 7.0 之后出现的错误。所以要解决这个问题,只需转到构建设置并搜索No Common Blocks并将其设置为NO

再次构建,您将不会再出现此错误。

【讨论】:

    【解决方案2】:

    我遇到了完全相同的问题。我有两个标题副本,并通过在 Xcode 中删除对它的引用来删除旧的副本。然后只有一个头文件引用指向项目导航器中的新头文件。

    在实际从文件系统中删除旧标头后,问题就消失了。

    这可能是 Xcode 中的错误。也许有时当您删除对文件的引用时,部分引用仍保留在项目文件中。

    【讨论】:

      【解决方案3】:

      我在所有文件头中从“#include”更改为“#import”,它解决了问题。我想当您“#include”一个文件时,您需要编写自己的防护措施来防止多个包含,而当您使用“#import”时,Xcode 会为您处理它。

      【讨论】:

        【解决方案4】:

        我发现了问题。头文件有两个副本,Xcode 搞糊涂了。

        现在的谜团是 Xcode 是如何决定自己复制这些文件的……

        【讨论】:

        • 完全一样的事情发生在我身上。原因不明:-(
        • 我也有同样的问题,但我的班级只有一个文件,现在遇到问题如何解决
        • 我使用 OSX Finder 在不同的文件夹中找到了该文件。我不知道为什么 Xcode 突然决定包含那个,但删除它解决了问题。
        • 我遇到了同样的问题,两个不同的子文件夹中的标题相同
        【解决方案5】:

        我在构建框架时遇到了同样的问题。 “previous definition is here”错误指向与原始“类的重复接口定义”错误完全相同的头文件和行号。以上都不起作用,代码中也没有错误。我在 Spotlight 中搜索了相关的标头,结果显示了两个副本:一个是我预期的,另一个在 build/Debug-iphonesimulator/include 中。我做了一个清理,然后手动删除了构建目录。问题消失了。

        【讨论】:

          【解决方案6】:

          就我而言,问题来自于从另一个项目中引入文件以进行重用。我不小心在复制对话框中“复制文件如果需要”,而不是在新项目中创建新副本,而是引用原始项目中的文件。一旦我删除了引用并正确地重新复制了文件,一切就OK了。

          【讨论】:

            【解决方案7】:

            我的问题如下。我在我的项目中添加了 pop 动画框架,但使用的是 xcodeproj 而不是 xcworkspace。 配置后,我能够构建 pop-iso-framework 目标,但无法构建我的应用程序目标。后来我意识到 Xcode 已经在 Build Phases -> Compile Sources of my app target 中添加了 pop 类。从那里删除所有 pop 类解决了这个问题。

            【讨论】:

              【解决方案8】:

              对我来说,这个问题是我在 Cocoapods 上迁移到 use_frameworks! 时引起的。我在用于扩展方法的便利类中从 FBSDKCoreKit 导入标头。这很好,直到我切换到使用框架,当使用本地包含 (#import "FBSDKAccessToken.h") 不再可以;我不得不切换到全局包含 (#import <FBSDKCoreKit/FBSDKAccessToken.h>)。 This article 描述了为什么您不再在桥接文件中包含标头,这为我指明了正确的方向。

              【讨论】:

                【解决方案9】:

                我在为不同的目标使用两个版本的 A.h A.m 文件时遇到了这个问题。所以我创建了两个文件夹(物理目录)并将每个 A.h 和 A.m 保存在单独的文件夹中。然后将文件夹添加到所需的目标。为我解决了这个问题。

                有点断章取义,但可能会有所帮助。 !!

                【讨论】:

                  【解决方案10】:

                  有同样的问题,似乎我的 project.pbxproj 文件中有一个太多的 class.m 文件。

                  在编辑之前务必备份该文件以防万一!

                  【讨论】:

                  • 没关系,我弄错了。即使从我的项目文件中删除所有引用,然后通过 Xcode 将它们添加回来,仍然会做同样的事情。
                  • 我觉得自己像个菜鸟,我的错误是没有添加 () 括号
                  【解决方案11】:

                  在使用各种自行创建的静态库归档工作区时,我也遇到了这个确切的问题。该项目可以正常构建并在模拟器上运行,但是当我尝试“存档”构建以进行 AdHoc 测试时,我会收到这些重复的接口定义错误。我的解决方案是确保“复制标题”阶段正确指示公共/项目/私有标题。我有一个错误地设置为“项目”的头文件。它必须是“公开的”,然后才能成功创建存档。

                  【讨论】:

                    【解决方案12】:

                    我收到此错误消息,但我没有重复的标头或重复的导入。问题是我重命名了头文件,而 Xcode 以某种方式将它们缓存起来,导致构建错误。

                    我做了以下来解决这个问题。希望它可以帮助那些已经尝试过其他答案但仍然遇到错误的人。

                    1. 清理项目
                    2. 删除“派生数据”(组织者>项目选项卡,选择项目并单击删除)
                    3. 重启 Xcode
                    4. 构建

                    【讨论】:

                      【解决方案13】:

                      我遇到了类似的问题,但我没有源文件的两个副本。就我而言,我有以下情况:

                      A 类 给出了上述错误,B 类 有一个使用 A 类类型的属性。

                      问题在于,在 B 类中,我在 .h 和 .m 文件中都调用了 #import "Class A"。在我的情况下,这导致了上述问题。希望这对任何人都有帮助。

                      【讨论】:

                      • 这正是我的问题。
                      猜你喜欢
                      • 1970-01-01
                      • 2011-07-08
                      • 1970-01-01
                      • 2012-10-24
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2020-06-16
                      • 2013-05-05
                      相关资源
                      最近更新 更多