我遇到了一个突然出现的奇怪错误的问题(或者至少我不记得我为此问题所做的任何事情),错误列表如下所示:
重复符号_NSStringFromMargin in: /Users/...-ehsqzpjjajyzdnevdhqhhsgeqhre/Build/Intermediates/ABC.build/Debug-iphonesimulator/ABC.build/Objects-normal/x86_64/CSFilterStrip.o /用户/...- ehsqzpjjajyzdnevdhqhhsgeqhre /建造/中间体/ ABC.build /调试-iphonesimulator / ABC.build /对象 - 正常/ x86_64的/ CSMainMenuVC.o
...
ld:架构x86_64 clang的6个重复符号:错误: 链接器命令失败,退出代码为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,这解决了这个问题。
答案 0 :(得分:2)
问题是您在头文件中定义NSStringFromMargin
。相反,您应该在头文件中声明它,并在.m文件中定义它。
.h应该是:
NSString *NSStringFromMargin(Margin margin);
.m应该是:
NSString *NSStringFromMargin(Margin margin)
{
return [NSString stringWithFormat:@"{%d,%d,%d,%d}",margin.left,margin.top,margin.right,margin.bottom];
}