0

カテゴリMathOpsの分子と分母が宣言されていない変数であると表示されるのはなぜですか?

それは第11章プログラム11.1にあります

間違いなく本と同じコードなので、なぜ動かないのか理解できません。

助けてください

コード:

    #import <Foundation/Foundation.h>  
#import "complex.h"  
#import "Fraction.h"  
#import "XYPoint.h"  

@interface Fraction (MathOps)  
-(Fraction *)add:(Fraction *) f;  
-(Fraction *)mul:(Fraction *) f;  
-(Fraction *)sub:(Fraction *) f;  
-(Fraction *)div:(Fraction *) f;  

@end  

@implementation Fraction (MathOps)  
-(Fraction *)add:(Fraction *) f  
{  
    Fraction *result = [[Fraction alloc]init];  

    result.numerator = (numerator * f.denominator)+(denominator * f.numerator);   

// numerator and denominator: Using undeclared variables.  

    result.denominator = denominator * f.denominator;  
}  
-(Fraction *)mul:(Fraction *) f  
{  
    Fraction *result = [[Fraction alloc]init];  
    result.numerator = numerator * f.numerator;  
    result.denominator = denominator * f.denominator;  

    // numerator and denominator: Using undeclared variables.  
}  
-(Fraction *)sub:(Fraction *) f {}  
-(Fraction *)div:(Fraction *) f {}  
@end  

typedef Fraction *FractionObj;  
int main (int argc, const char * argv[])  
{  

    @autoreleasepool {  
        complex *imaginary= [[complex alloc]init];  
        complex *real = [[complex alloc]init];  
        complex *results;  

        [real setReal:1];  
        [real setImaginary:2];  
        [real print];  

        [imaginary setReal:2];  
        [imaginary setImaginary:1];  
        [imaginary print];  

        results = [real add: imaginary];  
        [results print];  
        NSLog(@"FRACTIONS!");  
        Fraction *a = [[Fraction alloc]init];  
        Fraction *b = [[Fraction alloc]init];  
        id resultFraction;  

        [a setTo:20 over:3];  
        [b setTo:1 over:3];  
        [b minusSign];  
        [a minusSign];  

        id ab = a;  
        id ba = b;  
        [ab print: 0];  
        NSLog(@"-");  
        [ba print: 0];  
        NSLog(@"=");  
        resultFraction = [ab multiplyN: ba];  
        [resultFraction print: 1];  

      XYPoint *xy = [[XYPoint alloc]init];  

        [xy setX:100 andY:110];  
        [xy print];  

        NSLog(@"VERIFYING \n \n \n");  
        Fraction *fraction = [[Fraction alloc]init];  
        complex *Complex = [[complex alloc]init];  
        id number = [[complex alloc]init];  

        if([fraction isMemberOfClass: [complex class]])  
            NSLog(@"Fraction is member of class complex");  
        if([Complex isMemberOfClass: [NSObject class]])  
            NSLog(@"complex is member of class NSObject");  
        if([Complex isKindOfClass: [NSObject class]])  
            NSLog(@"complex is kind of class NSObject");  
        if([fraction isKindOfClass: [Fraction class]])  
            NSLog(@"Fraction is kind of class Fraction");  
        if([fraction respondsToSelector: @selector(print)])  
           NSLog(@"Fraction respond to selector print");  
        if([Complex respondsToSelector: @selector(print)])  
           NSLog(@"Complex responds to print");  
        if([Fraction instancesRespondToSelector: @selector(print)])  
           NSLog(@"Fraction's instances respond to print");  
        if([number respondsToSelector: @selector (print)])  
           NSLog(@"number responds to print");  
        if([number isKindOfClass: [complex class]])  
           NSLog(@"number is kind of class complex");  
        if([[number class] respondsToSelector:@selector (alloc)])  
           NSLog(@"Number class responds to alloc");  

        if([a counter]!=1){ NSLog(@"%i times was invoked method multiplyN", a.counter); }  
        else { NSLog(@"Only %i time was invoked method multiplyN", a.counter);}  

        typedef enum {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday} Day;  

    }  

    return 0;  
}  

Fraction.h

    @interface Fraction : NSObject
@property int numerator, denominator, counter;

//methods
@end

Fraction.m

@implementation
@synthesize numerator, denominator, counter;

//methods

@end
4

3 に答える 3

1

Fractionクラスファイル.hを確認し、分子と分母のプロパティが設定されているかどうかを確認することをお勧めします。

@property(nonatomic, ...) Type *numerator
@property(nonatomic, ...) Type *denominator

また、.mファイルには次のようになります。

@synthesize numerator, denominator

または、xcodeで、コマンドキーを押しながらその分子または分母にマウスを合わせて変数をクリックすると、xcodeは変数が宣言されているファイルに移動します。宣言されていない場合、何も起こりません。

于 2012-06-26T12:33:20.953 に答える
0

self.コードにプレフィックスを追加してみてください。

result.numerator = (self.numerator * f.denominator)+(self.denominator * f.numerator);
于 2012-06-26T13:01:28.007 に答える
0

変数を事前に設定せずに分子と分母を使用しているようです。これらの変数が他の変数と同じ名前であるという事実に混乱するかもしれませんが、それらが呼び出されているファイルに関連付けられていない場合、プログラムはそれらを認識しません。合成ステートメントは、おそらく@implementationステートメントの下に移動する必要があります。あなたが示しているコードには分子と分母の宣言が含まれていないという事実に少し混乱しています。あなたのコンパイラもそうだと確信しています。

于 2012-06-26T13:50:26.150 に答える