我正在处理我的程序,似乎设置中的某些内容发生了变化。突然我得到错误“类'Foo'的重复接口声明”。它提到了一个重复的头文件,但只有一个副本。
有趣的是,这只发生在调试模式,而不是设备模式。
有没有人知道可能出现什么问题?
我正在使用Objective-C ++和一些静态库。
答案 0 :(得分:17)
我有完全相同的问题。我有两个标题副本,并通过删除xcode中对它的引用删除了旧标题。然后只有一个标题的引用指向项目导航器中的新头文件。
实际从文件系统中删除旧标题后,问题就消失了。
这可能是xcode中的一个错误。有时,当您删除对文件的引用时,部分引用仍保留在项目文件中。
答案 1 :(得分:14)
我有此错误消息,我没有重复的标头或重复的导入。问题是我已经重命名了头文件,Xcode以某种方式保持缓存,这就产生了构建错误。
我做了以下修复此操作。希望它可以帮助那些已经尝试过其他答案但仍然有错误的人。
答案 2 :(得分:9)
我发现了问题。头文件有两个副本,XCode感到困惑。
现在神秘的是XCode决定自己复制这些文件......
答案 3 :(得分:5)
我遇到了类似的问题,但我没有源文件的两个副本。在我的情况下,我有以下情况:
A类给出了上述错误,而 B类则使用了A类的类型。
问题是在B类中我在.h和.m文件中都调用了#import“Class A”。这导致了我的上述问题。希望这有助于任何人。
答案 4 :(得分:2)
我在所有文件头中从“#include”更改为“#import”,它解决了问题。我想当你“#include”一个文件时,你需要编写自己的防范多个包含,而当你使用“#import”时,XCode会为你处理它。
答案 5 :(得分:2)
发生此错误是因为为不同的对象提供相同的变量名称。这是Xcode7.0之后出现的错误。因此,要解决此问题,只需转到构建设置并搜索无通用块并将其设置为否。
再次构建,您将不会再次出现此错误。
<强> CheersKP 强>
答案 6 :(得分:1)
在使用各种自创的静态库归档工作区时,我也遇到了这个问题。该项目可以很好地构建并在模拟器上运行但是当我尝试“存档”AdHoc测试的构建时,我会收到这些重复的接口定义错误。决议是让我确保'复制标题'阶段正确指出公共/项目/私人标题。我有一个错误地设置为'project'的头文件。它需要是“公开的”,之后,存档已成功创建。
答案 7 :(得分:1)
对我来说,这个问题是我在Cocoapods上迁移到use_frameworks!
时引起的。我在FBSDKCoreKit中导入了一个标头,用于扩展方法。这很好,直到我切换到使用框架,当使用本地包含(#import "FBSDKAccessToken.h"
)不再正常;我不得不切换到全局包含(#import <FBSDKCoreKit/FBSDKAccessToken.h>
)。 This article描述了为什么你的桥接文件中不包含标题,这使我指向了正确的方向。
答案 8 :(得分:1)
我的问题是以下。我在我的项目中添加了pop动画框架,但是使用了xcodeproj而不是xcworkspace。 配置完成后,我能够构建pop-iso-framework目标,但是我无法构建我的app目标。后来我意识到Xcode已经为 Build Phases - &gt;添加了pop类。编译我的应用目标的来源。从那里删除所有流行类修复了问题。
答案 9 :(得分:0)
有同样的问题,似乎我的project.pbxproj文件中有一个太多的class.m文件。
在编辑之前始终备份该文件以防万一!
答案 10 :(得分:0)
当使用两个版本的A.h A.m文件时,我遇到了这个问题。所以我创建了两个文件夹(物理目录)并将每个A.h和A.m保存在单独的文件夹中。然后将文件夹添加到所需目标。为我解决了这个问题。
偏离背景但可能有所帮助。 !!
答案 11 :(得分:0)
就我而言,问题来自于从另一个项目中引入文件以供重用。我不小心在复制对话框中“如果需要复制文件”,而不是在新项目中创建新副本,它引用原始项目中的文件。删除引用并正确地重新复制文件后,一切正常。
答案 12 :(得分:0)
我在构建框架时遇到了同样的问题。 &#34;先前的定义在这里&#34;错误指向与原始&#34;类重复的接口定义完全相同的头文件和行号#34;错误。以上都没有,并且代码中没有错误。我做了一个Spotlight搜索隐含的标题,并出现了两个副本:我期望的那个,另一个在build / Debug-iphonesimulator / include中。我做了一个干净,然后手动删除了构建目录。问题消失了。