2

我正在使用 Stephen Kochan 的 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 行的“不一致的实例变量规范”。之后它只是一直告诉我“分子”和“分母”未声明。我得到的这个程序的最后一个错误是“@autoreleasepool”中的“@'token”之前有一个“预期的表达式”。我需要更改什么才能使其编译?谢谢!!

4

3 回答 3

1

我刚刚使用 GNUStep 遇到了同样的错误。更改@interface 声明并设置类似

@interface Fraction: NSObject {
    int numerator;
    int denominator; 
}

-(void) print;
-(void) setNumerator: (int) n; 
-(void) setDenominator: (int) d;
@end

这就是诀窍并为我成功编译了程序。

于 2014-11-25T22:52:12.940 回答
0

我假设,您将整个代码复制到一个文件中。进入文件,//---- @interface section ----进入文件,其余的是文件的内容。但是,您不应该修改.Fraction .h//---- @implementation section ----Fraction .mmain.mmain.m

于 2013-06-05T07:06:31.023 回答
0

@autoreleasepool是一个新特性,你的编译器似乎太旧了。请参阅autoreleasepool 未在此范围内声明错误

于 2017-11-03T11:55:42.490 回答