0

私はObjective-Cプログラミングの世界への完全な「初心者」であり、ある種のつまずきに遭遇しました。先日、Stephen G.Kochanの「ProgramminginObjective-C、4th Edition」を入手し、分数クラスの作成を含む演習を行っています。さて、私は私なので、足し算、引き算、掛け算、割り算のメソッドを追加することで、チュートリアルの範囲を超えて少し「高度な」いじくり回すことができるかどうかを確認することにしました。そして、ワム、私はまだ方法がわからないことに遭遇します...(1)引数を使用して(および使用せずに)クラスメソッドを呼び出し、(2)戻り値を戻り値と同じ型の変数に割り当てます。参照されるメソッドは整数(int)を返すことになっています数値を入力しますが、何らかの理由で、両方の代入ステートメントで「互換性のないポインターから整数への変換...など」というエラーが発生します。これで1時間壁に頭をぶつけてきました。私は何が間違っているのですか?問題のメソッドのコードは次のとおりです。

-(void) add: frac1:(Fraction *) f1: (Fraction *) f2 
{ 
   int n1 = [Fraction: getNumerator()];
   int d1 = [Fraction: getDenominator()];
   // rest of method not yet written
}

-アンディH。

4

3 に答える 3

1

反対票の怒りを買う危険を冒して、間接的に質問に答えようと思います。

まず、クラスで足し算を実装する通常の方法は、それ自体に何かを追加するメソッドを提供することです。したがって、2 つの分数を加算するメソッドを提供するのではなく、分数をそれ自体に加算し、結果を新しい Fraction オブジェクトとして返すメソッドを提供してみてください。

第 2に、 Cocoa コーディング ガイドラインgetで説明されているように、メソッド名での使用は、通常、オブジェクトと値を間接的に返すメソッドを示すために使用されます。

独自のアクセサーを作成するよりも、分子と分母に @properties を使用する方が適切です。

したがって、IMO - あなたの方法は次のようになります。

- (Fraction *)addFraction:(NSFraction *)fraction {
    NSInteger numerator = self.numerator + fraction.numerator;
    NSInteger denominator = self.denominator + fraction.denominator;

    return [[NSFraction alloc] initWithNumerator:numerator andDenominator:denominator];
}

もちろん、関連するプロパティと初期化レーザーがあることを前提としています。

于 2012-08-09T22:10:38.637 に答える
1
int n1 = [Fraction getNumerator];
int d1 = [Fraction getDenominator];

セミコロンや括弧は必要ありません。

メソッドは次のように作成されます。

[ClassName methodName:paramater nextParam:param2];

パラメータ名など...

また、あなたのメソッド宣言も間違っています:

-(void) addfrac1:(Fraction *) f1 withF2:(Fraction *) f2 

add:とを取り除きf1:ます。

于 2012-08-09T21:58:49.220 に答える
0

あなたはObjective-Cメソッドを宣言する方法を誤解しました。これを入力しました:

-(void) add: frac1:(Fraction *) f1: (Fraction *) f2

コンパイラがそれを解釈する方法は次のとおりです。add:::3つの引数を持つのセレクター(メソッド名)が表示されます。最初の引数の名前はfrac1です。2番目の引数の名前はf1です。3番目の引数の名前はf2です。引数に型を指定しなかったためfrac1、コンパイラは型id(任意のオブジェクトを参照できます)を想定します。つまり、次のように入力したようなものです。

- (void)add:(id)frac1 :(Fraction *)f1 :(Fraction *)f2

このメソッドは次のように呼び出すことができます。

id something;
Fraction *fraction1;
Fraction *fraction2;
[myCalculator add:something :fraction1 :fraction2];

しかし、それはおそらくあなたが望むものではありません。

私はあなたがしたいことはこのようにあなたのメソッドを宣言することだと思います:

- (void)addFraction:(Fraction *)f1 toFraction:(Fraction *)f2;

次に、次のように呼び出すことができます。

Fraction *fraction1;
Fraction *fraction2;
[myCalculator addFraction:fraction1 toFraction:fraction2];

FractionがObjective-Cクラスの場合、メソッド内addFraction:toFraction:で、引数メッセージを送信して、次のように分子と分母を取得します。

int n1 = [f1 numerator];
int d1 = [f1 denominator];
于 2012-08-09T22:05:10.527 に答える