2016-09-18 39 views
-4
#import <Foundation/Foundation.h> 

// -------- @接口部-----這個程序中的構建錯誤是什麼?

@interface Fraction : NSObject 

{ 
    int numerator ; 
    int denominator; 
} 


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

@end 

// ----- @implementation部-----

@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]; 

//使用的打印方法

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

     [myFraction print]; 
     [myFraction release]; 

    } 
    return 0; 
} 
+0

我正在使用Xcode 8,但書籍是舊的前。它使用NSAutorelease,而在xcode 8中只使用autoreleasepool,所以我遇到了問題。 –

+0

哇。這是一些非常古老的代碼。無論你得到它,你都應該拋棄它,重新開始一些現代代碼。 – bbum

+0

蘋果指南,斯坦福大學課程和/或Ray Wenderich的網站都是很好的開端。大書呆子牧場也有很棒的課程。鑑於你似乎從頭開始,你可能想要走Swift路線。 Swift Playgrounds出現在iPad上。 – bbum

回答

0

您必須聲明你的局部變量的名字,你不能簡單介紹一下它們設置分數1/3

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

//顯示分數。所以:

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]; 

as new是一種標準方法,其確實是alloc然後是init

最後刪除對release的調用,在使用ARC的現代Objective-C中是非法的。

除此之外,鍵入錯誤和您的代碼應該工作。

一旦你找到了一本更新的書來學習編程,那麼你已經太老了。

HTH

+0

謝謝你的迴應。你建議我得到哪本書? –

+0

經常會推薦斯坦福大學的在線課程,但只有Google可以免費提供多個大學的在線課程。作爲*意見*,我建議你去參加一般市場或行業(包括蘋果)課程或書籍的大學課程或教科書。 – CRD