-2

私はObjectiveCとアプリの作成に非常に慣れていませんが、なぜこれが構築されていないのかよくわかりません。これが失敗している私のコードです:CalculatorViewController.m

#import "CalculatorViewController.h"

@interface CalculatorViewController ()

@end

@implementation CalculatorViewController
-(CalculatorBrain *)brain
{
    if (!brain){
        brain = [[CalculatorBrain alloc] init];
    }
    return brain;
}

-(IBAction)digitPressed:(UIButton *)sender;
{
    NSString *digit = [[sender titleLabel] text];
    if (userIsInTheMiddleOfTypingANumber){
        [display setText:[[display text] stringByAppendingString:digit]];
    } else{
            [display setText:digit];
        userIsInTheMiddleOfTypingANumber = YES;
        }

}
-(IBAction)operationPressed:(UIButton *)sender;
{
    if (userIsInTheMiddleOfTypingANumber){
        [[self brain] setOperand:[[display text] doubleValue]];
        userIsInTheMiddleOfTypingANumber = NO;
    }
    NSString *operation = [[sender titleLabel] text];
    double result = [[self brain] performOperation:operation];
    [display setText:[NSString stringWithFormat:@"%g", result]];
}

@end

およびCalculatorViewController.h

   #import <UIKit/UIKit.h>
#import "CalculatorBrain.h"

@interface CalculatorViewController : UIViewController{
    IBOutlet UILabel *display;
    CalculatorBrain *brain;
    BOOL userIsInTheMiddleOfTypingANumber;
}

-(IBAction)digitPressed:(UIButton *)sender;
-(IBAction)operationPressed:(UIButton *)sender;


@end

double result = [[self brain] performOperation:operation];CalculatorViewController.mの最後に、互換性のない型「void」の式で「double」を初期化するというエラーが表示されます。これはどういう意味ですか、これを修正するにはどこを探す必要がありますか?

4

2 に答える 2

0

CalculatorBrainこれは、のperformOperation:メソッドの戻り型が。voidではなく型であることを意味しdoubleます。その関数の宣言と定義を見て、エラーを修正するために何をする必要があるかを確認してください

于 2013-02-05T21:02:39.910 に答える
0

performOperation:おそらく次のように宣言されます

- (void)performOperation:(NSString*)operation;

ご覧のとおり、これの戻り値はですvoid。これは、何も返さないことを意味します。そのため、無効なreturnをdoubleに割り当てようとしていますが、これは無効です。

問題は、ヘッダーファイル、またはそれが実装されている実装ファイルのいずれかにあります。メソッドシグネチャを調べて、voidが含まれているかどうかを確認します。

修正するには、double変数に割り当てないか、(より望ましいと思いますが)performOperation:double値を返すことを許可します。

于 2013-02-05T21:03:10.033 に答える