首页 > Objective-C composite object 合成对象问题

Objective-C composite object 合成对象问题

最近看《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]; } @end int 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/prog1

duplicate 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.o
duplicate 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.o
duplicate 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.o
ld: 3 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

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


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

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


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

【热门文章】
【热门文章】