2013-12-17 2 views
0

Я новичок в Objective C, и я пытаюсь запустить один из примеров из книги, но результат двух экземпляров дает тот же результат. Вот код:Создание двух экземпляров, но вывод остается таким же

#include <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 

int main(int argc, const char * argv[]) 
{ 
    NSAutoreleasePool * fzrpool = [[NSAutoreleasePool alloc] init]; 

Fraction *myFraction = [[Fraction alloc] init]; 
    [myFraction setNumerator: 1]; 
    [myFraction setDenominator: 5]; 

    Fraction *fzr = [[Fraction alloc] init]; 
    [fzr setNumerator: 3]; 
    [fzr setDenominator: 2]; 

    NSLog (@"The value of myFraction is: "); 
    [myFraction print]; 
    NSLog (@"The value of fzr is: "); 
    [fzr print]; 

    [fzrpool drain]; 
return 0; 
} 

ВЫВОД

2013-12-17 11:56:01.187 helloworld[1988] The value of myFraction is: 
2013-12-17 11:56:01.187 helloworld[1988] 3/2 
2013-12-17 11:56:01.187 helloworld[1988] The value of fzr is: 
2013-12-17 11:56:01.187 helloworld[1988] 3/2 

Я не могу использовать @autoreleasepool {} здесь, потому что я работаю над окнами, НКУ. Что я здесь делаю неправильно?

+0

Ваш и числитель и знаменатель являются глобальными, поэтому последнее значение будет сохраняться. Вы хотите, чтобы оба они вели себя как свойство ivar /, поэтому их нужно помещать внутри {и} –

+0

, которые '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' :( –

ответ

0
#include <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[]) 
{ 

    Fraction *myFraction = [[Fraction alloc] init]; 
    [myFraction setNumerator: 1]; 
    [myFraction setDenominator: 5]; 

    Fraction *fzr = [[Fraction alloc] init]; 
    [fzr setNumerator: 3]; 
    [fzr setDenominator: 2]; 

    NSLog (@"The value of myFraction is: "); 
    [myFraction print]; 
    NSLog (@"The value of fzr is: "); 
    [fzr print]; 

    return 0; 
} 
+0

Эти фигурные скобки при реализации возвращают следующую ошибку: '15: 1: ошибка: несогласованная спецификация переменной экземпляра In function '- [Fraction print]': 19:20: error: 'numator' uneclared (первое использование в эта функция) 19:20: примечание: каждый необъявленный идентификатор сообщается только один раз для e Функция ach появляется в 19:31: ошибка: «знаменатель» необъявленный (первое использование в этой функции) В функции '- [ Fraction setNumerator:] ': 24: 4: error:' numator 'uneclared (первое использование в этой функции) In function' - [Fraction setDenominator:] ': 29: 4: ошибка: «знаменатель» необъявленный (первое использование в этой функции) ' –

+0

Это сработало для меня. Я думаю, используя устаревшую версию Xcode. Неважно, я редактировал код. – iCoder

+0

Он использует MRC. –

0

Ваш и числитель и знаменатель являются глобальными, поэтому последнее значение будет сохраняться. Вы хотите, чтобы оба они ведут себя как Ивар/собственность, поэтому необходимо поместить их в {и}

@implementation Fraction 
{ 
int numerator; 
int denominator; 
} 

Как вы в Windows, с помощью GCC,

хода вышеуказанных блоков с обеими ints и к @interface, то вы можете скомпилировать.

+0

Я получаю это, но эти брекеты дают ошибки. –

Смежные вопросы