Objective-C composite object 合成对象问题
巴扎黑
巴扎黑 2017-04-24 09:12:38
0
2
409

最近看《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)

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

巴扎黑
巴扎黑

全員に返信(2)
阿神

解決済み、コンポジットの .m ファイル内の @interface を .h に分割しました
この .h を main.m に導入すると、ビルドが成功します。

ただし、クラス分類ファイルは .h を分割せずに .m でのみ構築できます

いいねを押す +0
左手右手慢动作

error: linker command failed with exit code 1 (use -v to see invocation)
このエラー メッセージは、リンクにエラーがあることを意味します。詳細なエラー メッセージを投稿しないと、ほとんど役に立ちません。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート