最近看《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)
求熟手帮忙看下哪里出问题了
Selesaikannya, bahagikan @antaramuka dalam fail .m komposit kepada .h
Perkenalkan .h ini ke dalam main.m dan binaan akan berjaya.
Tetapi fail klasifikasi kelas boleh dibina hanya dengan .m dan tanpa .h berasingan
error: linker command failed with exit code 1 (use -v to see invocation)
Mesej ralat ini bermakna terdapat ralat dalam pautan Jika anda tidak menyiarkan mesej ralat terperinci, ia tidak akan berguna.