昨天的测试工程,代码来自斯坦福CS193P,一开始一点问题没有。今天试试selector 突然就编译不了了。即使注释的就剩ALLOC的那一行代码。究竟是什么问题啊。
奇怪的是补上实现后,又不报错了。
#import <Foundation/Foundation.h>
@interface Vehicle :NSObject
- (void)move;
@end
//!!!!添加实现后build succeeded!!!!
//@implementation Vehicle
//
//@end
@interface Ship : Vehicle
- (void)shoot;
@end
//@implementation Ship
//- (void)shoot {
// NSLog(@"Shoot!");
//}
//@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
//-------------code 2---------------
Ship *s = [[Ship alloc] init];
[s shoot];
[s move];
//Vehicle *v = shipWithShoot;
//[v shoot];
// id obj = shipWithShoot; //s is Ship
// [obj shoot];
//obj = v; //v is Vehicle
// [obj shoot];
//-------------code 4----------link 2
// if ([obj respondsToSelector:@selector(shoot)]) {
// [obj shoot];
// }
//
// if ([obj isKindOfClass:[NSString class]]) {
// NSString *str = [(NSString *)obj stringByAppendingString:@"xyzzy"];
// }
//-------------code 3---------------
...
}
return 0;
}
沒有遇到這種情況,個人認為可能造成的原因是重複編譯的問題。具體的詳情和解法可以參考這個部落格徹底解決_OBJC_CLASS_$_某檔名", referenced from:問題,希望可以幫到你
當然了 頭檔只是聲明符號而已,光有符號,沒有實現,連結的時候就會報找不到符號
提示找不到,補上實現就沒有問題了.至於問題可能是,編譯器的問題.