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