2011-01-12 75 views
2

我收到以下错误:如何返回一个类的实例?

"warning: conflicting types for '-(Fraction *) add: (Fraction *) f;" 

与线:

-(Fraction *) add: (Fraction *) f; 

这里是我的头代码:

// Define the Fraction class 

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

    -(void) print; 
    -(void) setTo: (int) n over: (int) d; 
    -(double) convertToNum; 
    -(void) add: (Fraction *) f; 
    -(void) reduce; 

    @end 

Here is my .m code: 
#import "Fraction.h" 

@implementation Fraction 
@synthesize numerator, denominator; 
-(void) print 
{ 
    NSLog (@"%i/%i", numerator, denominator); 
} 
-(double) convertToNum 
{ 
    if (denominator != 0) 
     return (double) numerator/denominator; 
    else 
     return 1.0; 
} 
-(void) setTo: (int) n over: (int) d 
{ 
    numerator = n; 
    denominator = d; 
} 


-(void) reduce 
{ 
    int u = numerator; 
    int v = denominator; 

    int temp; 

    while (v != 0) { 
     temp = u % v; 
     u = v; 
     v = temp; 
    } 

    numerator /= u; 
    denominator /= u; 

} 

-(Fraction *) add: (Fraction *) f; 
{ 
    // To add two fractions: 
    // a/b + c/d = ((a*d) + (b*c))/(b *d) 
    // multiply the denominators 
    // then mulitply each numerator by the OPPOSITE 
    // denominator 

    // result will store the result of the addition 
    Fraction *result = [[Fraction alloc] init]; 
    int  resultNum, resultDenom; 

    resultNum = numerator * f.denominator + denominator * f.numerator; 
    resultDenom = denominator * f.denominator; 

    [result setTo: resultNum over: resultDenom]; 
    NSLog(@"%i, %i", resultNum, resultDenom); 
    [result reduce]; // reduces the numerator and denominator 
    // as both are instance (classwide) variables 
    NSLog(@"%i is the result", result); 
    return result; 
} 
@end 

回答

4

您有加的两种不同的实现:。一个是:

-(void) add: (Fraction *) f; 

里面的接口(.h文件)。另一种是在实现(.m文件)

-(Fraction *) add: (Fraction *) f; 

你需要改变标题阅读此声明后,使得它返回一个指针分数,而不是无效的。

+2

另外,我看到你正在读Kochan的书:) – 2011-01-12 02:46:05

3

这是因为在你的头文件,你”已宣布退货类型为空:

-(void) add: (Fraction *) f; 

然而,在您的实施,实现返回一个指针分数的方法:

-(Fraction *) add: (Fraction *) 

而且,你有一个分号在您的实现,也许只是一个复制粘贴错误?

1

您在声明add方法在你的界面返回void,但你实现返回Fraction *

相关问题