【发布时间】:2014-06-02 20:32:44
【问题描述】:
我遇到了一个突然出现的奇怪错误问题(或者至少我不记得我为出现此问题所做的任何事情),错误列表如下所示:
重复的符号 _NSStringFromMargin 在: /Users/...-ehsqzpjjajyzdnevdhqhhsgeqhre/Build/Intermediates/ABC.build/Debug-iphonesimulator/ABC.build/Objects-normal/x86_64/CSFilterStrip.o /Users/...-ehsqzpjjajyzdnevdhqhhsgeqhre/Build/Intermediates/ABC.build/Debug-iphonesimulator/ABC.build/Objects-normal/x86_64/CSMainMenuVC.o
...
ld:架构 x86_64 的 6 个重复符号 clang:错误: 链接器命令失败,退出代码为 1(使用 -v 查看调用)
所有 6 个大约相同的 NSStringFromMargin 并且总是第一行指向 CSFilterStrip.o 位置,我无法弄清楚为什么会这样,下面是 Margin.h
//Margin.h
#ifndef ABC_Margin_h
#define ABC_Margin_h
struct Margin {
int left;
int top;
int right;
int bottom;
};
typedef struct Margin Margin;
CG_INLINE Margin
MarginMake(int left, int top, int right, int bottom)
{
Margin margin;
margin.left = left;
margin.top = top;
margin.right = right;
margin.bottom = bottom;
return margin;
}
NSString *NSStringFromMargin(Margin margin)
{
return [NSString stringWithFormat:@"{%d,%d,%d,%d}",margin.left,margin.top,margin.right,margin.bottom];
}
#endif
在 CSFilterStrip.h 中,我正在导入 Margin.h,因为:
@property (nonatomic) Margin margin;
如果没有这个导入,我有:“接口类型不能静态分配”错误,我可以添加 * 但是为什么在使用 CGRect 之后不需要指针,之后我创建了 Margin 对象。
重申一下:我已经检查过,没有意外导入“*.m”。
更新 正如@Michael 诊断的那样,我将攻击方法从标题移到了为 Margin 设计的单独类别:NSString+MarginUtils,这解决了问题。
【问题讨论】: