Как вернуть экземпляр класса? - PullRequest
2 голосов
/ 12 января 2011

Я получаю следующую ошибку:

"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

Ответы [ 3 ]

4 голосов
/ 12 января 2011

У вас есть две разные реализации add :. Один из них:

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

внутри интерфейса (файл .h). Другой в реализации (файл .m)

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

Вам потребуется изменить заголовок, чтобы прочитать это последнее объявление, чтобы он возвращал указатель дроби, а не void.

3 голосов
/ 12 января 2011

Это потому, что в вашем заголовочном файле вы объявили тип возвращаемого значения void:

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

Тем не менее, в вашей реализации вы реализуете метод, возвращающий указатель дроби:

-(Fraction *) add: (Fraction *)

Кроме того, у вас есть точка с запятой в вашей реализации, может быть, просто ошибка копирования-вставки?

1 голос
/ 12 января 2011

Вы объявляете метод add для возврата void в ваш интерфейс, но ваша реализация возвращает Fraction *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...