我正在使用Stephen Kochan编写的Programming in Objective-C第4版来自学Objective-C。作为一个初学者,我还不知道如何调试,甚至当我从书中复制和粘贴代码到Xcode时,我也会出现错误。这是我从书中得到的一个不能编译的代码示例:
#import <Foundation/Foundation.h>
//---- @interface section ----
@interface Fraction: NSObject
-(void) print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;
@end
//---- @implementation section ----
@implementation Fraction {
int numerator;
int denominator;
}
-(void) print {
NSLog (@"%i/%i", numerator, denominator);
}
-(void) setNumerator: (int) n {
numerator = n;
}
-(void) setDenominator: (int) d {
denominator = d;
}
@end
//---- program section ----
int main (int argc, char * argv[]) {
@autoreleasepool {
Fraction *myFraction;
// Create an instance of a Fraction
myFraction = [Fraction alloc]; myFraction = [myFraction init];
// Set fraction to 1/3
[myFraction setNumerator: 1]; [myFraction setDenominator: 3];
// Display the fraction using the print method
NSLog (@"The value of myFraction is:");
[myFraction print];
}
return 0;
}
我得到的错误是"不一致的实例变量规范"在第12行。在那之后,它一直告诉我"分子"one_answers"分母"没有声明。我得到的这个程序的最后一个错误是,在"@autoreleasepool"中有一个"在'@'令牌之前的预期表达式"。我需要做什么更改才能使其编译?谢谢! !
我刚刚使用GNUStep得到了相同的错误。更改@interface声明并设置类似
的内容@interface Fraction: NSObject {
int numerator;
int denominator;
}
-(void) print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;
@end
这就成功地为我编译了程序。
我假设您将整个代码复制到一个文件中。//---- @interface section ----
放入Fraction .h
文件,//---- @implementation section ----
放入Fraction .m
文件,其余的放入main.m
文件。但是你不应该修改main.m
的内容
@autoreleasepool
是一个新功能,你的编译器似乎太旧了。