这个程序中的构建错误是什么?

时间:2016-09-18 14:50:04

标签: objective-c

#import <Foundation/Foundation.h>

// -------- @ interface section -----

@interface Fraction : NSObject

{
    int numerator ;
    int denominator;
}


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

@end

// ----- @implementation section -----

@implementation Fraction

-(void) print
{
    NSLog (@"%i/%i", numerator, denominator);
}


-(void) setNumerator : (int) n
{
    numerator = n;
}

-(void) setDenominator: (int) d

{
    denominator = d;
}

@end

// ----程序部分----

int main(int argc, const char * argv[]) {

    @autoreleasepool {

//创建分数的实例

        myFraction = [Fraction alloc];
        myFraction = [Fraction init];

//将分数设置为1/3

        [myFraction setNumerator :1];
        [myFractioin setDenominator :3];

//使用print方法显示分数

        NSLog(@"The value of My Fraction is :");

        [myFraction print];
        [myFraction release];

    }
    return 0;
}

1 个答案:

答案 0 :(得分:0)

您必须声明您的本地变量,您不能简单地按名称引入它们。所以:

myFraction = [Fraction alloc];

错了,至少应该是:

Fraction *myFraction;           // declare variable
myFraction = [Fraction alloc];  // allocate

可以简单地写成:

Fraction *myFraction = [Fraction alloc];

然后在下一行你又犯了一个简单的错误:

myFraction = [Fraction init];

你打算初始化你分配的对象,而不是类,所以这至少应该是:

myFraction = [myFraction init];

然而,在单独的行中分配和初始化是非常不寻常的,所以:

Fraction *myFraction = [Fraction alloc];
myFraction = [myFraction init];

写为单行:

Fraction *myFraction = [[Fraction alloc] init];

甚至:

Fraction *myFraction = [Fraction new];

因为newalloc后跟init的标准方法。

最后删除对release的调用,在使用ARC的现代Objective-C中它是非法的。

除了修复之外,输入错误和代码应该有效。

一旦你完成了,找到一本更新的书来学习编程,你所拥有的那本书太旧了。

HTH