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

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

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

巴扎黑
巴扎黑

répondre à tous(2)
阿神

Résolu, divisez l'@interface dans le fichier .m du composite en .h
Introduisez ce .h dans main.m et la construction réussira.

Mais le fichier de classification de classe ne peut être construit qu'avec .m et sans .h séparé

左手右手慢动作

error: linker command failed with exit code 1 (use -v to see invocation)
Ce message d'erreur signifie qu'il y a une erreur dans le lien. Si vous ne publiez pas le message d'erreur détaillé, il ne sera pas d'une grande utilité.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal