Objective-C composite object 合成对象问题

【字号: 日期:2023-12-15浏览:57作者:雯心

问题描述

最近看《Objective-C 程序设计》 ,11章有个合成对象

自己写了一个例子 Xcode没报错,编译时报错了

//'Rectangle.h'@interface Rectangle : NSObject@property int width,height;-(void) setWidth: (int) w andHeight:(int) h;- (int) area;@end#import 'Rectangle.h'@interface Square_c : NSObject{ Rectangle *rect;}- (instancetype) init;- (instancetype) initWithSide:(int) s;- (void) setSide:(int) s;- (int) side;-(int) area;@end@implementation Square_c- (instancetype) init { self = [super init]; if (self) {rect = [[Rectangle alloc] init]; } return [self initWithSide:0];}- (instancetype) initWithSide:(int) s{ self = [super init]; if (self)[rect setWidth:s andHeight:s]; return self;}- (void) setSide:(int) s{ [rect setWidth:s andHeight:s];}- (int) side{ return rect.width;}-(int) area{ return [rect area];}@endint main (int argc,char * argv[]){ @autoreleasepool {Square_c *square_c = [[Square_c alloc] initWithSide:20]; }}

Xcode编译后报错

Ld /Users/ma/Library/Developer/Xcode/DerivedData/prog1-eexmdvqxkooeorhbkjzcupkepwqy/Build/Products/Debug/prog1 normal x86_64 cd /Project/prog1 export MACOSX_DEPLOYMENT_TARGET=10.10 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -L/Users/ma/Library/Developer/Xcode/DerivedData/prog1-eexmdvqxkooeorhbkjzcupkepwqy/Build/Products/Debug -F/Users/ma/Library/Developer/Xcode/DerivedData/prog1-eexmdvqxkooeorhbkjzcupkepwqy/Build/Products/Debug -filelist /Users/ma/Library/Developer/Xcode/DerivedData/prog1-eexmdvqxkooeorhbkjzcupkepwqy/Build/Intermediates/prog1.build/Debug/prog1.build/Objects-normal/x86_64/prog1.LinkFileList -mmacosx-version-min=10.10 -fobjc-arc -fobjc-link-runtime -Xlinker -dependency_info -Xlinker /Users/ma/Library/Developer/Xcode/DerivedData/prog1-eexmdvqxkooeorhbkjzcupkepwqy/Build/Intermediates/prog1.build/Debug/prog1.build/Objects-normal/x86_64/prog1_dependency_info.dat -o /Users/ma/Library/Developer/Xcode/DerivedData/prog1-eexmdvqxkooeorhbkjzcupkepwqy/Build/Products/Debug/prog1duplicate symbol _OBJC_IVAR_$_Square2.rect in: /Users/ma/Library/Developer/Xcode/DerivedData/prog1-eexmdvqxkooeorhbkjzcupkepwqy/Build/Intermediates/prog1.build/Debug/prog1.build/Objects-normal/x86_64/main.o /Users/ma/Library/Developer/Xcode/DerivedData/prog1-eexmdvqxkooeorhbkjzcupkepwqy/Build/Intermediates/prog1.build/Debug/prog1.build/Objects-normal/x86_64/Square_composite.oduplicate symbol _OBJC_CLASS_$_Square2 in: /Users/ma/Library/Developer/Xcode/DerivedData/prog1-eexmdvqxkooeorhbkjzcupkepwqy/Build/Intermediates/prog1.build/Debug/prog1.build/Objects-normal/x86_64/main.o /Users/ma/Library/Developer/Xcode/DerivedData/prog1-eexmdvqxkooeorhbkjzcupkepwqy/Build/Intermediates/prog1.build/Debug/prog1.build/Objects-normal/x86_64/Square_composite.oduplicate symbol _OBJC_METACLASS_$_Square2 in: /Users/ma/Library/Developer/Xcode/DerivedData/prog1-eexmdvqxkooeorhbkjzcupkepwqy/Build/Intermediates/prog1.build/Debug/prog1.build/Objects-normal/x86_64/main.o /Users/ma/Library/Developer/Xcode/DerivedData/prog1-eexmdvqxkooeorhbkjzcupkepwqy/Build/Intermediates/prog1.build/Debug/prog1.build/Objects-normal/x86_64/Square_composite.old: 3 duplicate symbols for architecture x86_64clang: error: linker command failed with exit code 1 (use -v to see invocation)

求熟手帮忙看下哪里出问题了

问题解答

回答1:

解决了,把composite的那个.m文件里的@interface拆分出.hmain.m 里再引入这个.h 就可以成功build了。

但是类的分类 文件只用.m 不分出.h 是可以build的

回答2:

error: linker command failed with exit code 1 (use -v to see invocation)这个错误信息的意思就是link出错了,如果你不详细的出错信息贴出来的话,那么它并没有什么卵用。

相关文章: